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

JavaのGsonで@SerializedNameアノテーションを使ってJSONプロパティ名を変更する方法

JavaのオブジェクトをJSONに変換する際、クラスのフィールド名とは異なるプロパティ名で出力したいケースはよくあります。そんなときに役立つのが、Gsonが提供する@SerializedNameアノテーションです。このアノテーションを付与すると、シリアライズ(JSONへの変換)・デシリアライズ(JSONからの復元)の両方において、指定した名前がフィールド名として使用されます。

なお、@SerializedNameはGsonインスタンスに設定されたデフォルトの命名ポリシーを含む、あらゆるFieldNamingPolicyを上書きします。命名ポリシー自体を切り替えたい場合は、GsonBuilderクラスを使用して設定できます。

@SerializedNameの構文

@Retention(value=RUNTIME)
@Target(value={FIELD,METHOD})
public @interface SerializedName

このアノテーションはフィールドおよびメソッドに適用でき、実行時(RUNTIME)まで情報が保持されるため、Gsonがリフレクションで参照できる仕組みになっています。

コード例

以下の例では、EmployeeクラスのfirstNameとlastNameフィールドに@SerializedNameを付けて、それぞれ「first_name」「last_name」というキー名に変更しています。

import com.google.gson.annotations.*;
import com.google.gson.*;

public class SerializedNameAnnotationTest {
    public static void main(String args[]) {
        Employee emp = new Employee("Rahul", "Dev", 30, "Nagpur");
        Gson gson = new GsonBuilder().setPrettyPrinting().create(); // 整形して出力
        String jsonStr = gson.toJson(emp);
        System.out.println(jsonStr);
    }
}

// Employeeクラス
class Employee {
    @SerializedName("first_name")
    private String firstName;

    @SerializedName("last_name")
    private String lastName;

    private int age;
    private String address;

    public Employee() {
    }

    public Employee(String firstName, String lastName, int age, String address) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.address = address;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }
}

実行結果

{
  "first_name": "Rahul",
  "last_name": "Dev",
  "age": 30,
  "address": "Nagpur"
}

実行結果を見ると、@SerializedName("first_name")を付けたfirstNameフィールドは「first_name」、lastNameフィールドは「last_name」というキーで出力されています。一方、アノテーションを付けていないageやaddressは、元のフィールド名がそのまま使われます。

このように@SerializedNameを使えば、Java側のコードはキャメルケースのまま保ちつつ、外部APIなどが要求するスネークケースのJSON形式に柔軟に対応できます。外部システムとの連携で命名規則が異なる場合に、ぜひ活用してください。

  1. 【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法

    GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを

  2. JavaでJSONファイルを読み込む方法|json-simpleライブラリの使い方を徹底解説

    JSON(JavaScript Object Notation)は、人間が読み書きしやすいデータ交換のために設計された、軽量なテキストベースのオープン標準フォーマットです。JSONで使われる記法は、C、C++、Java、Python、Perlなど、多くのプログラミング言語に精通した開発者にとって馴染み深いものとなっています。サンプルJSONドキュメント以下は、書籍情報を格納した典型的なJSONドキュメントの例です。{ book: [ { id: 01, language: Java, edition