JavaのライブラリjacksonでJsonNodeクラスとreadTreeメソッドで深い階層のJSON形式を読み込む方法
JSON形式がどういった形式で来るかわからない場合はreadTreeメソッドでJsonNodeオブジェクトを取得します。
このJsonNodeオブジェクトで任意のJSONオブジェクトを操作することが可能になります。
getメソッドの引数にkeyを指定します。結果はvalueが返ります。
String文字列のJSONは以下とします。
{
"key1":{
"id":20,
"name":"takahashi"
},
"key2":["val1", "val2"]
}
JsonNodeクラスを使えばkey1のidを取得する、といった深い階層のvalueも簡単に取得する事ができます。
package jp.co.jackson;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class SampleJackson3 {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
String json = "{\"key1\":{\"id\":20,\"name\":\"takahashi\"},\"key2\":[\"val1\",\"val2\"]}";
JsonNode node = mapper.readTree(json);
System.out.println(node.toString());// JSON全体を文字列として取得
System.out.println(node.get("key1").get("id"));
System.out.println(node.get("key1").get("name"));
System.out.println(node.get("key2"));
}
}
readTreeメソッドにはJSON形式の文字列型を渡します。JsonNodeオブジェクトが返却されるので、toString()メソッドでJSON全体を文字列として返します。
getメソッドにキーを渡せばvalueが返ります。結果は以下のようになります。
{"key1":{"id":20,"name":"takahashi"},"key2":["val1","val2"]}
20
"takahashi"
["val1","val2"]
JSON形式の中の配列が返ってくる場合はfor文でループすることができます。
JsonNodeにはsize()メソッドが用意されています。
package jp.co.jackson;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class SampleJackson3 {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
String json = "{\"key1\":{\"id\":20,\"name\":\"takahashi\"},\"key2\":[\"val1\",\"val2\"]}";
JsonNode node = mapper.readTree(json);
JsonNode obj = node.get("key2");
for(int i = 0;i<obj.size();i++) {
System.out.println(obj.get(i));
}
}
}
結果は以下の配列を順次処理できていることがわかります。
"val1" "val2"

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント