使用Jackson从JSON数组中检索字符串

umb*_*ile 11 java json jackson

我找到了几个接近我正在尝试做的答案,但还不够,我已经能够让它发挥作用了.我有一堆JSON的,看起来像这样的例子(实际上只几个层次更深,并与数百个项目在我要访问的级别){"query":{"pages":{"links":[{"word":"bobsyeruncle","code":4},{"word":"easyaspie","code":3}]}}}.我不能改变格式; 这是别人的API.我不需要相当多的东西; 事实上我只想要一些像["bobsyeruncle","easyaspie"]的数组.(或列表或其他.)

我尝试了一个没有数组的简单JSON版本,并且能够使用rootNode.get("query")轻松访问单个字符串.get("pages")...以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());
        }
Run Code Online (Sandbox Code Playgroud)

Sta*_*Man 10

也许这篇博文可能会有所帮助:与杰克逊一起遍历JSON树

我不确定你遇到了哪个确切的问题,但有一点需要注意的是,JSON数组是通过传入条目索引而不是名称来遍历的.因此,您可以使用objectNode.get("key"),而是使用arrayNode.get(0).或者,如果您想要安全地播放并允许"丢失"条目,请使用arrayNode.path(0)(和ditto for JSON Objects).

还记得你可以回到JSON Trees(JsonNode)和POJO之间; ObjectMapper有多种方法可以在表示之间进行转换(convertValue(),readAsTree(),treeToValue(),valueToTree()).因此可以对某些部分使用数据绑定,对其他部分使用树模型; 有时将子树绑定为POJO,有时将数据绑定为高级别,并使用树模型访问子树.这是一种非常强大的做事方式,但需要一段时间习惯.

希望这可以帮助!