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 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。