質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

11486閲覧

Jacksonを使用したjsonのパース処理について

hirdd

総合スコア50

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/02/03 11:31

編集2022/01/12 10:55

jacksonを使用して以下のjsonをパースして、値を取得したいのですが、なかなか取得方法を理解できないでいます。
java①では"results"と"result_index"が取得できたので、次はその子ノードを取得しようと思ったのですが(子ノードでfieldNames()をすると、"alternatives"と"final"が取れるイメージです。)、やり方が分かりません。。。どなたか、ご存知の方ご教授いただけないでしょうか??

■java①

java

1File file = new File(fileName); 2ObjectMapper mapper = new ObjectMapper(); 3 4// rootNodeを取得 5JsonNode rootNode = mapper.readValue(file, JsonNode.class); 6 7Iterator<String> fieldStrings = rootNode.fieldNames(); 8 9 while (fieldStrings.hasNext()) { 10 String fieldString = fieldStrings.next(); 11 System.out.println(fieldString); 12 }

JSON

1{ 2"results": [ 3      { 4         "alternatives": [ 5            { 6               "confidence": 0.982,  7               "transcript": "おはようございます" 8            } 9         ]  10         "final": true 11      } 12   ]  13   "result_index": 0 14}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

fieldNamesは、オブジェクト(JSONでは{}で表記)ノードではない場合、空の反復子を返します。
"results"ノードは、配列(JSONでは[]で表記)ノードであり、オブジェクトノードではありません。
配列ノードに対しては、elementsメソッドを使用して反復子を取得します。

Java

1 public static void main(String[] args) { 2 JsonNode rootNode = null; 3 try { 4 String jsonText = "{\"results\":[{\"alternatives\":[{\"confidence\":0.982,\"transcript\":\"おはようございます\"}],\"final\":true}],\"result_index\":0}"; 5 rootNode = new ObjectMapper().readValue(jsonText, JsonNode.class); 6 } catch (IOException e) { 7 e.printStackTrace(); 8 } 9 10 printNode(rootNode, "root"); 11 // root.results[0].alternatives[0].confidence: 0.982 12 // root.results[0].alternatives[0].transcript: "おはようございます" 13 // root.results[0].final: true 14 // root.result_index: 0 15 16 System.out.println(rootNode.get("results").get(0).get("alternatives").get(0).get("confidence")); 17 // 0.982 18 19 System.out.println(rootNode.findValue("confidence")); 20 // 0.982 21 } 22 23 static void printNode(JsonNode node, String path) { 24 if (node.isObject()) { 25 // Object {} ノードを表示します。 26 Iterator<String> iter = node.fieldNames(); 27 while (iter.hasNext()) { 28 String name = (String)iter.next(); 29 printNode(node.get(name), path + "." + name); 30 } 31 32 /* 名前とノードがペアになった反復子を使用することもできます。 33 Iterator<Map.Entry<String, JsonNode>> iter2 = node.fields(); 34 while (iter2.hasNext()) { 35 Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>)iter2.next(); 36 printNode(entry.getValue(), path + "." + entry.getKey()); 37 } 38 */ 39 } else if(node.isArray()) { 40 // Array [] ノードを表示します。 41 Iterator<JsonNode> iter = node.elements(); 42 int index = 0; 43 while (iter.hasNext()) { 44 printNode((JsonNode)iter.next(), path + String.format("[%s]", index++)); 45 } 46 } else { 47 // Value を表示する。 48 System.out.println(String.format("%s: %s", path, node)); 49 } 50 }

投稿2017/02/03 18:37

copepoda

総合スコア324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問