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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント