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

JavaのJSON Processing(オブジェクトモデル)を使ってJsonWriterでJSONオブジェクトをシリアライズする方法

javax.json.JsonWriterインターフェースは、JSONオブジェクトや配列の構造を出力先に書き込むための機能を提供します。javax.json.JsonWriterFactoryクラスにはJsonWriterインスタンスを生成するためのメソッドが含まれており、ファクトリインスタンスは同じ設定で複数のライターインスタンスを作成するために再利用できます。

また、javax.json.Jsonクラスが提供するstaticメソッドcreateWriter()を使えば、出力ソースから直接ライターインスタンスを簡単に生成することも可能です。

構文

public static JsonWriter createWriter(Writer writer)

以下の例では、JsonObjectBuilderを使って構築したJSONオブジェクトを、JsonWriterインターフェースでシリアライズして文字列として出力しています。

コード例

import java.io.StringWriter;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;

public class JsonWriterTest {
    public static void main(String[] args) {
        JsonObject jsonObj = Json.createObjectBuilder()
                .add("name", "Adithya")
                .add("age", 25)
                .add("salary", 40000)
                .add("address",
                        Json.createObjectBuilder().add("street", "Madhapur")
                                .add("city", "Hyderabad")
                                .add("zipCode", "500084")
                                .build()
                )
                .add("phoneNumber",
                        Json.createArrayBuilder().add("9959984000")
                                .add("7702144400")
                                .build()
                )
                .build();

        StringWriter stringWriter = new StringWriter();
        JsonWriter writer = Json.createWriter(stringWriter);
        writer.writeObject(jsonObj);
        writer.close();
        System.out.println(stringWriter.getBuffer().toString());
    }
}

実行結果

{"name":"Adithya","age":25,"salary":40000,"address":{"street":"Madhapur","city":"Hyderabad","zipCode":"500084"},"phoneNumber":["9959984000","7702144400"]}

ポイント解説

このコードの流れは以下の通りです。

  • Json.createObjectBuilder():ネストしたオブジェクトや配列を含むJSONデータをプログラム的に組み立てます。
  • StringWriter:出力結果をメモリ上の文字列として受け取るために使用します。
  • writer.writeObject(jsonObj):JsonObjectをJSON形式のテキストに変換して書き込みます。
  • writer.close():ライターを必ずクローズしてリソースを解放します。クローズしないとバッファがフラッシュされない場合があります。

なお、このAPI(JSR 353 / Java API for JSON Processing)を使用するには、クラスパスに実装ライブラリ(例:Glassfishのorg.glassfish.javax.jsonなど)が必要です。

  1. JavaでJSONオブジェクトをデコードする方法をわかりやすく解説

    JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONでは、オブジェクトと配列という2種類の構造化データを表現できます。 JavaでJSONオブジェクトをデコード(解析・復元)するには、json.simple APIが提供する JSONObject クラスと JSONArray クラスを使用します。これらのクラスはそれぞれ、JSONObject が java.util.Map のように動作し、JSONArray が java.util.List のように動作するため、普段使い慣れたコレクション操作と同じ

  2. JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)

    このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの2つを使って解説します。 サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。 Person.java import java.util.List; import java.util.Map; public class Person { String name; Integer age;