如何从嵌套的 LinkedHashMap 中获取数据

How to Get data from nested LinkedHashMap

如何从此 linkedHashMap 获取“测试”数据

Map<String, Object> response = new LinkedHashMap<String, Object>() {{
    put("data", new LinkedHashMap<String, Object>() {{
        put("images", new LinkedHashMap<String, Object>() {{
            put("original", new LinkedHashMap<String, Object>() {{
                put("url", "test");
            }});
        }});
    }});
}};

response.get("url") = null

response.get("data.images.original.url") = null

response.get("数据").get("图像").get("原始").get("url")

Compilation failed:
cannot find symbol
symbol:   method get(java.lang.String)
location: class java.lang.Object

toString();

结果{data={images={original={url=test}}}};

“正确”的方式是

Object url = ((Map<String,Object>) ((Map<String,Object>) ((Map<String,Object>) response.get("data")).get("images")).get("original")).get("url");

是的,这太丑了。主要是因为您选择的类型。

通过将地图的值设置为 Object,您已经获得了放置内容的灵活性,但是您将负担放在了地图的“reader”上以实际投射到任何东西他们要。并且由于涉及到泛型,所以所有这些转换都是未经检查的(即运行时可以检查返回的对象实际上是 Map 但它无法验证它们是否真的是 Map<String, Object>.

此外,您还使用了 double brace initialization,我强烈反对这样做,因为这是一个丑陋的 hack。如果您使用的是 Java 9 或更高版本,则只需使用 Map.of() 即可:

Map<String, Object> response = Map.of(
    "data", Map.of(
        "images", Map.of(
            "original", Map.of(
                "url", "test"
            )
        )
    )
);

这里的缩进只是为了可视化那些调用的结构,绝对没有必要。