JavaのGsonでExclusionStrategyインターフェースを使ってJSON変換時に特定のフィールドを除外する方法
Google GsonライブラリのExclusionStrategyインターフェースを使用すると、シリアライズ(直列化)およびデシリアライズ(逆直列化)の際に、任意のフィールドを除外することができます。
具体的には、ExclusionStrategyインターフェースを独自に実装したクラスを作成し、GsonBuilderのsetExclusionStrategies()メソッドで登録します。この設定により、Gsonはシリアライズとデシリアライズの両方の処理に対して、指定された一連の除外戦略を適用するようになります。
構文
public GsonBuilder setExclusionStrategies(ExclusionStrategy... strategies)
ExclusionStrategyインターフェースの主なメソッド
- shouldSkipField(FieldAttributes f):対象のフィールドを除外したい場合にtrueを返します。FieldAttributesからフィールド名やアノテーションなどの情報を取得して判定できます。
- shouldSkipClass(Class<?> clazz):対象のクラス全体を除外したい場合にtrueを返します。
実装例
import com.google.gson.*;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
public class ExclusionStrategyTest {
public static void main(String args[]) throws Exception {
Gson gson = new GsonBuilder().setExclusionStrategies(new CustomExclusionStrategy()).create();
Person person = new Person();
person.setFirstName("Adithya");
person.setLastName("Sai");
person.setAddress("Hyderabad");
String jsonString = gson.toJson(person);
System.out.println("JSONをシリアライズ:\n " + jsonString);
String inputJson = "{\"firstName\":\"Raja\", \"lastName\":\"Ramesh\", \"address\":\"Hyderabad\"}";
person = gson.fromJson(inputJson, Person.class);
System.out.println("JSONをデシリアライズ:\n" + person);
}
}
// CustomExclusionStrategyクラス
class CustomExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipField(FieldAttributes f) {
if(f.getName().equals("firstName")) {
return true;
}
return false;
}
public boolean shouldSkipClass(Class aClass) {
return false;
}
}
// Personクラス
class Person {
private String firstName, lastName, address;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "Person [" + firstName + " " + lastName + " " + address + "]";
}
}実行結果
JSONをシリアライズ:
{"lastName":"Sai","address":"Hyderabad"}
JSONをデシリアライズ:
Person [null Ramesh Hyderabad]コードの解説
この例では、CustomExclusionStrategyクラスのshouldSkipField()メソッド内で、フィールド名が「firstName」であるかどうかを判定し、該当する場合はtrueを返してそのフィールドを除外しています。その結果、以下のような動作になります。
- シリアライズ時:firstNameフィールドは出力されるJSONに含まれず、「lastName」と「address」のみが出力されます。
- デシリアライズ時:入力JSONに含まれる「firstName」の値は無視され、PersonオブジェクトのfirstNameはnullのままになります。
このように、ExclusionStrategyを活用することで、センシティブな情報や不要なフィールドをJSON変換の対象から柔軟に除外でき、APIレスポンスやログ出力などで機密データの漏えいを防ぐことにも役立ちます。
-
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()メソッドを