JavaのライブラリjacksonでJsonNodeクラスとreadTreeメソッドで深い階層のJSON形式を読み込む方法

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"

コメント

タイトルとURLをコピーしました