我发现了几个与我正在尝试做的事情接近的答案,但还没有足够让我能够实现它。我有一堆看起来像这个例子的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