Javaのjavax.json APIを使って既存のJSONデータを更新する方法
JsonBuilderFactoryインターフェースは、JsonObjectBuilderインスタンスを生成するためのファクトリ(工場)クラスです。JsonObjectBuilderは、JsonObjectモデルをゼロから構築するためのビルダーであり、空のJSONオブジェクトモデルを初期化した上で、オブジェクトに名前と値のペアを追加し、最終的なオブジェクトを返すメソッドを提供します。
createObjectBuilder()メソッドを呼び出すことで、JsonObjectを構築するために使用できるJsonObjectBuilderインスタンスを作成できます。なお、javax.jsonはJSON Processing API(JSON-P)と呼ばれる標準仕様の一部であり、MavenやGradleを使ってプロジェクトに依存関係として追加することで利用可能になります。
構文
JsonObjectBuilder createObjectBuilder()
以下の例では、既存のJSONデータを読み込み、そこに新しいデータを追加して更新する方法を示します。処理の流れとしては、まず文字列からJsonReaderでJsonObjectを読み取り、その内容をすべてJsonObjectBuilderにコピーします。その後、新しいキーと値を追加して再度build()することで、更新済みのJSONオブジェクトが完成します。
サンプルコード
import java.io.*;
import javax.json.*;
public class UpdateExistingJsonTest {
public static void main(String[] args) throws Exception {
String jsonString = "{\"id\":\"115\", \"name\":\"Raja\", \"address\":[{\"area\":\"Madhapur\", \"city\":\"Hyderabad\"}]}";
StringReader reader = new StringReader(jsonString);
JsonReader jsonReader = Json.createReader(reader);
System.out.println("Existing JSON: \n" + jsonString);
StringWriter writer = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(writer);
JsonObject jsonObject = jsonReader.readObject();
JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null);
JsonObjectBuilder jsonObjectBuilder = jsonBuilderFactory.createObjectBuilder();
// 既存のすべてのキーと値をビルダーにコピー
for(String key : jsonObject.keySet()) {
jsonObjectBuilder.add(key, jsonObject.get(key));
}
// 新しい名前と値のペアを追加
jsonObjectBuilder.add("Contact Number", "9959984000");
jsonObjectBuilder.add("Country", "India");
// 更新済みのJsonObjectを構築
jsonObject = jsonObjectBuilder.build();
jsonWriter.writeObject(jsonObject);
System.out.println("new JSON: \n" + jsonObject);
}
}
実行結果
Existing JSON:
{"id":"115", "name":"Raja", "address":[{"area":"Madhapur", "city":"Hyderabad"}]}
new JSON:
{"id":"115","name":"Raja","address":[{"area":"Madhapur","city":"Hyderabad"}],"Contact Number":"9959984000","Country":"India"}
このように、javax.json APIでは既存のJsonObjectを直接変更することができないため、一度JsonObjectBuilderに内容をコピーし、必要な要素を追加した上でbuild()メソッドで新しいJsonObjectを生成するというアプローチが基本となります。イミュータブル(不変)な設計によりスレッドセーフな扱いがしやすくなる一方、更新時にはこのような再構築の手順が必要になる点に注意してください。
-
JavaでJSONオブジェクトをデコードする方法をわかりやすく解説
JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONでは、オブジェクトと配列という2種類の構造化データを表現できます。 JavaでJSONオブジェクトをデコード(解析・復元)するには、json.simple APIが提供する JSONObject クラスと JSONArray クラスを使用します。これらのクラスはそれぞれ、JSONObject が java.util.Map のように動作し、JSONArray が java.util.List のように動作するため、普段使い慣れたコレクション操作と同じ
-
JavaでJSONファイルを読み込む方法|json-simpleライブラリの使い方を解説
JSONは、広く利用されているデータ交換フォーマットの一つであり、軽量かつ言語に依存しないという大きな特徴を持っています。JavaでJSONを扱う際に便利なのが、軽量なJSON処理ライブラリであるjson-simpleです。このライブラリを使えば、JSONファイルの読み込み・書き出しはもちろん、JSONテキストのエンコードやデコードも簡単に行えます。さらに、JSON仕様(RFC4627)に完全準拠しているため、安心して利用できます。 JSONファイルを読み込むには、まずjson-simple.jarファイルをダウンロードし、プロジェクトのクラスパスに設定しておく必要があります。 読み込むJSO