,我有以下結構的一個HashMap: -未知深度嵌套地圖查詢鍵的存在和獲得價值
mymap = {a:{b:{c:{d:{e}}}}
如何檢查的關鍵「d」的所有腦幹中的HashMap MyMap中最簡單的方法是什麼? 有什麼可以派上用場的Java8功能嗎?
mymap.get("a")).get("b")..;
是行不通的,因爲我不知道在哪個d嵌套的水平。 如何檢查地圖中是否存在d,並在沒有此追蹤調用的情況下獲取其值?提前致謝。
,我有以下結構的一個HashMap: -未知深度嵌套地圖查詢鍵的存在和獲得價值
mymap = {a:{b:{c:{d:{e}}}}
如何檢查的關鍵「d」的所有腦幹中的HashMap MyMap中最簡單的方法是什麼? 有什麼可以派上用場的Java8功能嗎?
mymap.get("a")).get("b")..;
是行不通的,因爲我不知道在哪個d嵌套的水平。 如何檢查地圖中是否存在d,並在沒有此追蹤調用的情況下獲取其值?提前致謝。
您可以使用FasterXML-Jackson庫,它爲您提供遍歷nesed 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");
}
最近我有一個類似的問題,並設法提出了一個解決方案,可以與任何JSON深度一起工作。
這是一個解決方案,它將字符串轉換爲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
}
希望這有助於..
我可以做一個data.get?取值? – Tania
是的,您可以使用'get(String key)'提取值,但如果密鑰不存在,您將收到'null',所以最好使用'path(String key)'以避免'null'值,你將得到一個對象調用'MissingNode'。如果你想獲得嵌套的鍵,你可能需要使用:'findValue(String key)' –
我得到這個:[java] com.fasterxml.jackson.core.JsonParseException:意外的字符('A'(代碼65 )):期待雙引號開始字段名稱。 我的字段名稱不會用雙引號打開。我如何繞過這個? – Tania