Java(Gson)の@Exposeアノテーションを使ってJSONから特定のフィールドを除外する方法
Gsonライブラリが提供する@Exposeアノテーションを使用すると、シリアライズ(直列化)やデシリアライズ(逆直列化)の対象にフィールドを含めるか除外するかを細かく制御できます。このアノテーションはserializeとdeserializeという2つのboolean型パラメータを受け取ることができ、それぞれにtrueまたはfalseを指定します。
@ExposeアノテーションをGsonに反映させるには、通常のnew Gson()ではなく、GsonBuilderクラスを使ってGsonインスタンスを作成し、excludeFieldsWithoutExposeAnnotation()メソッドを呼び出す必要があります。このメソッドを呼び出すことで、@Exposeアノテーションが付与されていないすべてのフィールドが、シリアライズ・デシリアライズの対象から自動的に除外されるようになります。
構文
public GsonBuilder excludeFieldsWithoutExposeAnnotation()
コード例
以下の例では、Employeeクラスのnameとageフィールドには@Expose(serialize = true, deserialize = true)を付与し、salaryフィールドには@Expose(serialize = false, deserialize = false)を付与しています。その結果、excludeFieldsWithoutExposeAnnotation()を有効にしたGsonでは、salaryフィールドだけがJSON出力から除外されます。
import com.google.gson.*;
import com.google.gson.annotations.*;
public class JsonExcludeAnnotationTest {
public static void main(String args[]) {
Employee emp = new Employee("Raja", 28, 40000.00);
// 通常のGsonインスタンス(@Exposeを無視)
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonStr = gson.toJson(emp);
System.out.println(jsonStr);
// @Exposeアノテーションを有効化したGsonインスタンス
gson = new GsonBuilder().setPrettyPrinting()
.excludeFieldsWithoutExposeAnnotation().create();
jsonStr = gson.toJson(emp);
System.out.println(jsonStr);
}
}
// Employeeクラス
class Employee {
@Expose(serialize = true, deserialize = true)
public String name;
@Expose(serialize = true, deserialize = true)
public int age;
@Expose(serialize = false, deserialize = false)
public double salary;
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
}実行結果
1つ目の出力は通常のGsonによるもので、@Exposeアノテーションの設定に関わらずすべてのフィールドが出力されます。2つ目の出力はexcludeFieldsWithoutExposeAnnotation()を有効にした場合で、serialize = falseが指定されたsalaryフィールドが除外されていることが確認できます。
{
"name": "Raja",
"age": 28,
"salary": 40000.0
}
{
"name": "Raja",
"age": 28
}このように、@ExposeアノテーションとGsonBuilderの組み合わせを活用すれば、パスワードや給与などの機密性の高いデータをJSONに含めずに安全にオブジェクトを変換できます。
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを
-
JavaのGsonライブラリでJSONを整形出力(Pretty Print)する方法
Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを利用することで、JavaオブジェクトからJSONを生成したり、JSON文字列をJavaオブジェクトへ変換(デシリアライズ)したりできます。 デフォルトでは、Gsonは余計な空白や改行を省いたコンパクト形式でJSONを出力します。ログの確認やデバッグ時にJSONを読みやすくしたい場合は、整形出力(Pretty Print)を有効にしましょう。そのためには、GsonBuilderクラスのsetPrettyPrinting()メソッドを使ってGsonインスタンスを構成します。このメソッドを呼び出すことで、インデントと改