未知深度嵌套地图检查密钥存在并获取值

时间:2016-06-08 12:29:52

标签: java

我有以下结构的散列图: -

mymap = {a:{b:{c:{d:{e}}}}

如何以最简单的方式检查hashmap mymap中键“d”的存在? 是否有任何可能派上用场的Java8功能?

mymap.get( "a" )).get( "b" )..; 

无法正常工作,因为我不知道d嵌套的级别。 如何检查地图中是否存在d,并在没有此追踪调用的情况下获取其值?提前谢谢。

2 个答案:

答案 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");
}