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

Javaのflexjsonで@JSONアノテーションを使ってシリアル化を制御する方法

flexjsonライブラリでは、@JSONアノテーションを使用することで、シリアル化(直列化)の対象に含めるフィールドと除外するフィールドを細かく制御できます。このアノテーションはJSONSerializerクラスによって解釈され、ゲッターメソッドやフィールド、クラスに対して付与することが可能です。

JSONSerializerクラスのserialize()メソッドを呼び出すと、対象インスタンスの浅い(shallow)シリアル化が実行されます。デフォルトではすべてのプロパティが出力されますが、@JSON(include=false)を指定したプロパティはJSON出力から除外されます。

@JSONアノテーションの構文

@Retention(value=RUNTIME)
@Target(value={FIELD, TYPE, METHOD})
public @interface JSON

この定義からわかるように、@JSONアノテーションはフィールド、型(クラス)、メソッドのいずれにも適用でき、実行時(RUNTIME)にリフレクション経由で参照されます。

コード例

以下の例では、EmployeeクラスのlastNameaddressのゲッターメソッドに@JSON(include=false)を付与し、これらのフィールドをシリアル化の対象から除外しています。

import flexjson.JSONSerializer;
import flexjson.JSON;

public class JSONAnnotationTest {
    public static void main(String[] args) {
        JSONSerializer serializer = new JSONSerializer().prettyPrint(true);
        Employee emp = new Employee("Raja", "Ramesh", 30, "Hyderabad");
        String jsonStr = serializer.serialize(emp);
        System.out.println(jsonStr);
    }
}

// Employeeクラス
class Employee {
    private String firstName, lastName, address;
    private int age;

    public Employee(String firstName, String lastName, int age, String address) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.address = address;
    }

    public String getFirstName() {
        return firstName;
    }

    // 除外対象:lastName は出力されない
    @JSON(include=false)
    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    // 除外対象:address は出力されない
    @JSON(include=false)
    public String getAddress() {
        return address;
    }
}

実行結果

{
  "age": 30,
  "class": "Employee",
  "firstName": "Raja"
}

ポイントのまとめ

  • @JSON(include=false)を付けたゲッター・フィールドは、JSON出力から自動的に除外されます。
  • prettyPrint(true)を指定すると、インデント付きの整形されたJSONが出力されます。
  • flexjsonはデフォルトで"class"プロパティも出力するため、不要な場合はexclude("class")などで除外できます。
  • 逆に特定のフィールドだけを出力したい場合は、@JSON(include=true)を明示的に指定し、他を除外する制御も可能です。
  1. JavaとOpenCVで長方形を描画する方法|Imgproc.rectangle()の使い方を徹底解説

    Java用OpenCVライブラリの org.opencv.imgproc パッケージには、Imgproc クラスが含まれています。画像に長方形を描画するには、このクラスが提供する rectangle() メソッドを使用します。 このメソッドは以下のパラメータを受け取ります。 Matオブジェクト:長方形を描画する対象となる画像を表します。 Pointオブジェクト(2つ):描画する長方形の対角となる2つの頂点座標を表します。 Scalarオブジェクト:長方形の色をBGR形式で指定します。 整数値:長方形の枠線の太さを指定します(デフォルト値は1)。 サンプルコード 以下は、白紙の画像に長方形を

  2. JavaとOpenCVで線を描画する方法をわかりやすく解説

    Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画