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クラスのlastNameとaddressのゲッターメソッドに@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)を明示的に指定し、他を除外する制御も可能です。
-
JavaとOpenCVで長方形を描画する方法|Imgproc.rectangle()の使い方を徹底解説
Java用OpenCVライブラリの org.opencv.imgproc パッケージには、Imgproc クラスが含まれています。画像に長方形を描画するには、このクラスが提供する rectangle() メソッドを使用します。 このメソッドは以下のパラメータを受け取ります。 Matオブジェクト:長方形を描画する対象となる画像を表します。 Pointオブジェクト(2つ):描画する長方形の対角となる2つの頂点座標を表します。 Scalarオブジェクト:長方形の色をBGR形式で指定します。 整数値:長方形の枠線の太さを指定します(デフォルト値は1)。 サンプルコード 以下は、白紙の画像に長方形を
-
JavaとOpenCVで線を描画する方法をわかりやすく解説
Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画