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クラスの personId と personName フィールドに対して @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属性を使えば、複数の代替キー名から逆シリアル化することも可能。
-
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
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを