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

JavaのGsonでExclusionStrategyインターフェースを使ってJSON変換時に特定のフィールドを除外する方法

Google GsonライブラリのExclusionStrategyインターフェースを使用すると、シリアライズ(直列化)およびデシリアライズ(逆直列化)の際に、任意のフィールドを除外することができます。

具体的には、ExclusionStrategyインターフェースを独自に実装したクラスを作成し、GsonBuildersetExclusionStrategies()メソッドで登録します。この設定により、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レスポンスやログ出力などで機密データの漏えいを防ぐことにも役立ちます。

  1. JavaでJsonPointerインターフェースを使用してJSONのキーの値を取得する方法

    JSONPointerは、JSONドキュメント内の特定のキーの値へアクセスするための文字列構文を定義した標準規格です。Jsonクラスの静的ファクトリメソッドであるcreatePointer()を呼び出すことで、JSONPointerのインスタンスを生成できます。JSONPointerでは、すべての文字列構文がスラッシュ「/」で始まるのが特徴です。キーの値を取得するには、JSONPointerオブジェクトに対してgetValue()メソッドを呼び出します。 前提条件 この記事のコードを実行するには、Java EE / Jakarta EEに含まれるJSON Processing(JSON-P)の

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

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