Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】JacksonのJsonNodeでJSONフィールド・配列・ネストされたオブジェクトにアクセスする方法

JsonNodeとは、JSONを扱うためのJacksonのツリーモデルです。JSONデータをJsonNodeインスタンスとして読み込んだり、逆にJsonNodeからJSON形式で出力したりすることができます。

Jacksonを使ってJSONをJsonNodeとして読み込むには、まずObjectMapperクラスのインスタンスを作成し、readValue()メソッドを呼び出します。読み込んだノードに対しては、get()メソッドを使用することで、フィールド(プロパティ)配列ネストされたオブジェクトにアクセスできます。

さらに、asText()メソッドでノードの値を文字列として取得したり、asInt()メソッドで値をJavaのint型に変換したりすることも可能です。

JsonNodeへのアクセス例

以下の例では、JsonNodeからJSONのフィールド、配列、ネストされたオブジェクトにそれぞれアクセスしています。

サンプルコード

import com.fasterxml.jackson.databind.*;
import java.io.*;
public class ParseJSONNodeTest {
    public static void main(String args[]) {
        String jsonStr = "{ \"name\" : \"Raja\", \"age\" : 30," +
                         " \"technologies\" : [\"Java\", \"Scala\", \"Python\"]," +
                         " \"nestedObject\" : { \"field\" : \"value\" } }";
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            JsonNode node = objectMapper.readValue(jsonStr, JsonNode.class);
            // フィールドへのアクセス
            JsonNode nameNode = node.get("name");
            String name = nameNode.asText();
            System.out.println(name);
            // 数値フィールドへのアクセス
            JsonNode ageNode = node.get("age");
            int age = ageNode.asInt();
            System.out.println(age);
            // 配列要素へのアクセス(インデックス指定)
            JsonNode array = node.get("technologies");
            JsonNode jsonNode = array.get(1);
            String techStr = jsonNode.asText();
            System.out.println(techStr);
            // ネストされたオブジェクトへのアクセス
            JsonNode child = node.get("nestedObject");
            JsonNode childField = child.get("field");
            String field = childField.asText();
            System.out.println(field);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

実行結果

Raja
30
Scala
value

ポイント解説

  • node.get("name"):キー名を指定して子ノードを取得します。該当するキーが存在しない場合は null が返されるため、実際のコードではnullチェックを行うのが安全です。
  • array.get(1):配列ノードに対しては、0始まりのインデックスを指定して要素にアクセスできます。
  • asText() / asInt():ノードの値をそれぞれ文字列型・int型として取得するための便利なメソッドです。

なお、存在しないキーにアクセスした際に例外やnullを避けたい場合は、null を返す get() の代わりに、「MissingNode」を返す path() メソッドを使うと、より堅牢なコードを書くことができます。

  1. 【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)

    JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず

  2. JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説

    このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ