我有以下结构的散列图: -
mymap = {a:{b:{c:{d:{e}}}}
如何以最简单的方式检查hashmap mymap中键“d”的存在? 是否有任何可能派上用场的Java8功能?
mymap.get( "a" )).get( "b" )..;
无法正常工作,因为我不知道d嵌套的级别。 如何检查地图中是否存在d,并在没有此追踪调用的情况下获取其值?提前谢谢。
答案 0 :(得分:2)
我最近遇到了类似的问题,并设法提出了一个适用于任何JSON深度的解决方案。
这是一个解决方案,它将String转换为JsonNode对象,然后尝试查找给定fieldName的父值(在本例中为'd')。返回非空的结果将告诉您该值是否存在。
ObjectMapper mapper = new ObjectMapper();
String myMapJson = "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":\"\"}}}}"
JsonNode data = mapper.readTree(myMapJson);
if (((ObjectNode)data.findParent("d")) != null) {
// Do something if value is found
} else {
// Do something if value is not found
}
希望这会有所帮助..
答案 1 :(得分:1)
您可以使用FasterXML-Jackson库,它可以让您轻松遍历所需的json。
例如:
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
String myMapJson = "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":\"\"}}}}"
JsonNode data = mapper.readTree(myMapJson);
boolean hasKey = data.has("d");
或者,如果您已将对象设为Map
,则可将其写为json
,然后按上述方式加载:
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
String jsonData = mapper.writeValueAsString(myMapObject);
JsonNode data = mapper.readTree(jsonData);
boolean hasKey = data.has("d");
if (hasKey) {
JsonNode result = data.findValue("d");
}