如何从嵌套的 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"
)
)
)
);
这里的缩进只是为了可视化那些调用的结构,绝对没有必要。
如何从此 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"
)
)
)
);
这里的缩进只是为了可视化那些调用的结构,绝对没有必要。