【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() メソッドを使うと、より堅牢なコードを書くことができます。
-
【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)
JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず
-
JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説
このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ