JavaでJSONフィールド名の命名規則を定義する方法【GsonのFieldNamingPolicy解説】
GsonライブラリのFieldNamingPolicyを使用すると、JSONフィールド名に対して標準的な命名規則を簡単に定義できます。GsonBuilderと組み合わせてGsonインスタンスを構成することで、Javaのフィールド名を目的のJSONフィールド名へ自動的に変換可能です。具体的には、GsonBuilderのsetFieldNamingPolicy()メソッドを使い、シリアライズ(直列化)およびデシリアライズ(非直列化)の際に適用される命名ポリシーを指定します。
Gsonがサポートする主なフィールド命名ポリシー
- FieldNamingPolicy.IDENTITY:シリアライズ時に、Javaモデルとまったく同じ名前をそのまま使用します。
- FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES:キャメルケースのJavaフィールド名を、各単語をアンダースコア(_)で区切った小文字形式に変換します。
- FieldNamingPolicy.LOWER_CASE_WITH_DASHES:キャメルケースのJavaフィールド名を、各単語をハイフン(-)で区切った小文字形式に変換します。
- FieldNamingPolicy.UPPER_CAMEL_CASE:シリアライズ時に、Javaフィールド名の最初の文字を大文字にします。
- FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES:最初の文字を大文字にするとともに、各単語をスペースで区切ります。
実装例
import com.google.gson.*;
import java.sql.Date;
import java.time.LocalDate;
public class FieldNamingPolicyTest {
public static void main(String[] args) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.setDateFormat("yyyy-MM-dd")
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
.create();
Person p = new Person("Raja", "Ramesh", 30, Date.valueOf(LocalDate.of(1988, 1, 1)));
String jsonStr = gson.toJson(p);
System.out.println(jsonStr);
}
}
// Personクラス
class Person {
private String fistName;
private String lastName;
private int _age;
private Date dateOfBirth;
public Person(String fistName, String lastName, int _age, Date dateOfBirth) {
super();
this.fistName = fistName;
this.lastName = lastName;
this._age = _age;
this.dateOfBirth = dateOfBirth;
}
}
出力結果
{
"fist-name": "Raja",
"last-name": "Ramesh",
"_age": 30,
"date-of-birth": "1988-01-01"
}
この例ではLOWER_CASE_WITH_DASHESを適用しているため、「fistName」は「fist-name」、「dateOfBirth」は「date-of-birth」のようにキャメルケースがハイフン区切りの小文字へ変換されています。一方、「_age」はもともとキャメルケースのパターンに該当しないため、元の名前のまま出力されます。
補足:個別のフィールド名を制御したい場合
命名ポリシーの一括適用ではなく、特定のフィールドだけ任意のJSON名にしたい場合は、@SerializedNameアノテーションをフィールドに付与する方法が便利です。ポリシーとの併用も可能なので、プロジェクトの要件に応じて使い分けるとよいでしょう。
-
JavaでJsonPointerインターフェースを使用してJSONのキーの値を取得する方法
JSONPointerは、JSONドキュメント内の特定のキーの値へアクセスするための文字列構文を定義した標準規格です。Jsonクラスの静的ファクトリメソッドであるcreatePointer()を呼び出すことで、JSONPointerのインスタンスを生成できます。JSONPointerでは、すべての文字列構文がスラッシュ「/」で始まるのが特徴です。キーの値を取得するには、JSONPointerオブジェクトに対してgetValue()メソッドを呼び出します。 前提条件 この記事のコードを実行するには、Java EE / Jakarta EEに含まれるJSON Processing(JSON-P)の
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを