ツリーモデルAPIでJSONデータを読み込む
前回は
ツリーモデルの核になるのは,
// 配列のノードから2番目の子ノードを取得
JsonNode secondNode = node.get(2);
// オブジェクトのノードからフィールド名「name」のノードを取得
JsonNode nameNode = node.get("name");
// ノードから文字列値を取得
String value = node.getStringValue();
ファイルかデータを読み込んでツリーを構築するにはObjectMapperクラスを利用します。まず,
// ObjectMapperを作成
ObjectMapper mapper = new ObjectMapper();
// mydata.jsonからルートノードを取得
JsonNode rootNode = mapper.readValue(new File("mydata.json"), JsonNode.class);
今回は,
[{
"name" : { "first" : "太郎", "last" : "技評" },
"mail" : "taro@example.jp"
},
{
"name" : { "first" : "次郎", "last" : "技術" },
"mail" : "jiro@example.jp"
},
{
"name" : { "first" : "花子", "last" : "評論" },
"mail" : "hanako@example.jp"
}]
このデータを読み込んで,
// ObjectMapperを作成
ObjectMapper mapper = new ObjectMapper();
// ルートノードを取得
JsonNode rootNode = mapper.readValue(new File("mydata.json"), JsonNode.class);
JsonNode current;
for (int i=0; (current = rootNode.get(i)) != null; i++) {
// "name"オブジェクトのノードを取得
JsonNode nameNode = current.get("name");
System.out.println("name: ");
// "name"オブジェクトのフィールドデータを取得して表示
Iterator<String> nameNodeFields = nameNode.getFieldNames();
while (nameNodeFields.hasNext()) {
String nameNodeField = nameNodeFields.next();
System.out.println(" " + nameNodeField + ": " + nameNode.get(nameNodeField));
}
// "mail"フィールドのノードを取得してデータを表示
JsonNode mailNode = current.get("mail");
System.out.println("mail: " + mailNode.getTextValue());
}
この例では,
name:
first: "太郎"
last: "技評"
mail: taro@example.jp
name:
first: "次郎"
last: "技術"
mail: jiro@example.jp
name:
first: "花子"
last: "評論"
mail: hanako@example.jp
このコードを実行すると,