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

JavaのGsonで@SerializedNameアノテーションを使う方法:JSONフィールド名を自由にカスタマイズする

JavaでGsonライブラリを使用してオブジェクトをJSONに変換する際、フィールド名とJSONのキー名を別々にしたいケースはよくあります。そんなときに役立つのが @SerializedName アノテーションです。

@SerializedName を使うと、実際のJavaフィールド名とは異なる名前でシリアライズ(およびデシリアライズ)できます。アノテーションの属性として期待するJSON上の名前を指定すれば、Gsonはその名前を使ってフィールドの読み書きを行います。

@SerializedName の構文

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

使用例

以下の例では、Personクラスの personIdpersonName フィールドに対して @SerializedName を付与し、それぞれ「id」「name」というJSONキー名にマッピングしています。一方、personAddress フィールドにはアノテーションを付けていないため、元のフィールド名がそのまま使われます。

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

public class SerializedNameTest {
    public static void main(String args[]) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        Person person = new Person(115, "Raja Ramesh", "Hyderabad");
        String jsonStr = gson.toJson(person);
        System.out.println(jsonStr);
    }
}

// Personクラス
class Person {
    @SerializedName("id")
    private int personId;

    @SerializedName("name")
    private String personName;

    private String personAddress;

    public Person(int personId, String personName, String personAddress) {
        this.personId = personId;
        this.personName = personName;
        this.personAddress = personAddress;
    }

    public int getPersonId() {
        return personId;
    }

    public String getPersonName() {
        return personName;
    }

    public String getPersonAddress() {
        return personAddress;
    }
}

実行結果

@SerializedName を付けたフィールドは指定した名前に変換され、付けていないフィールドは元の名前のまま出力されていることがわかります。

{
  "id": 115,
  "name": "Raja Ramesh",
  "personAddress": "Hyderabad"
}

ポイントまとめ

  • @SerializedName はフィールドやメソッドに適用できる(@Target が FIELD と METHOD)。
  • JSONのキー名がスネークケース(snake_case)などJavaの命名規則と異なる場合に特に便利。
  • シリアライズ(toJson)だけでなく、デシリアライズ(fromJson)時にも同じ名前でマッピングされる。
  • Gson 2.x以降では alternate 属性を使えば、複数の代替キー名から逆シリアル化することも可能。
  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

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

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