我發現了幾個與我正在嘗試做的事情接近的答案,但還沒有足夠讓我能夠實現它。我有一堆看起來像這個例子的JSON(實際上只有幾個級別更深,並且有數百個物品在我想訪問的級別):{"query":{"pages":{"links":[{"word":"bobsyeruncle","code":4},{"word":"easyaspie","code":3}]}}}
。我無法改變格式;它是別人的API。我不需要很多這樣的東西;實際上我只想要一些像[「bobsyeruncle」,「easyaspie」]的數組。 (或一個列表或任何)使用Jackson從JSON數組中檢索字符串
我試驗了一個簡單版本的JSON,沒有數組,並且能夠使用rootNode.get(「query」)輕鬆訪問單個字符串。 (「頁面」)...在https://stackoverflow.com/questions/338586/a-better-java-json-library/338608#338608中描述的方式。但是我一直無法以這種方式獲得陣列。我在這裏找到的大多數答案都假設我想創建一個像「鏈接」這樣的POJO,其中包含「單詞」和「代碼」,但我不這樣做。爲了訪問我想要的字符串,是否有必要創建一個類似「鏈接」的列表,其中包含「單詞」和「代碼」,然後忽略「代碼」?這看起來不正確。
(此外,如果任何人都可以指向我的文檔/教程在JacksonInFiveMinutes教程和整個的javadoc之間的某處,我敢肯定,這將有助於太。)
ETA這個工作,我覺得!:
String theJsonString = "{\"query\":{\"pages\":{\"links\":"
+ "[{\"word\":\"bobsyeruncle\"},{\"word\":\"easyaspie\"}]}}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(theJsonString);
JsonNode interestingObjectNode = rootNode.path("query").path("pages").path("links");
for (int i = 0; i < interestingObjectNode.size(); i ++) {
System.out.println(interestingObjectNode.get(i).path("word").asText());
}
刪除我以前的評論 - 我最終到達那裏,把上面的一些代碼,以防萬一誰發現這個問題。 – umbraphile
安全嗎?傑克遜用法中的「安全」是什麼意思? @StaxMan – gumuruh
安全的意思是,如果你使用'get',並且沒有匹配的節點,它將返回null,並且必須被檢查。但是'路徑'會返回虛擬的「缺失節點」,因此不需要進行空值檢查。 – StaxMan