私は何をしようとしているかに近いいくつかの回答を見つけましたが、それを十分に働かせることはできませんでした。私はこの例のようなJSONの束を持っています(実際にはいくつかのレベルが深く、アクセスしたいレベルの何百ものアイテムがあります):{"query":{"pages":{"links":[{"word":"bobsyeruncle","code":4},{"word":"easyaspie","code":3}]}}}
。フォーマットを変更することはできません。他の誰かのAPIです。私には必要ないことがたくさんあります。実際、私は["bobsyeruncle"、 "easyaspie"]の配列のようなものがほしいだけです。ジャクソンを使用してJSON配列から文字列を取得
アレイを持たないより簡単なバージョンのJSONを試してみましたが、rootNode.get( "query")を使って簡単に1つの文字列にアクセスできました。 ( "ページ")... 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を返し、チェックする必要があるという意味で安全です。しかし、 'path'を使うと、仮想の "missing node"が返されるので、nullチェックは必要ありません。 – StaxMan