【Java】Jacksonライブラリでnullや空のフィールドを除外してJSONを出力する方法
JacksonはJava向けの人気ライブラリで、非常に強力なデータバインディング機能を備えています。カスタムJavaオブジェクトをJSONへシリアライズしたり、JSONをJavaオブジェクトへデシリアライズしたりするためのフレームワークを提供しており、REST API開発などで広く利用されています。
Jacksonには@JsonIncludeアノテーションが用意されており、シリアライズ時の挙動をクラス単位またはフィールド単位で制御できます。このアノテーションを使うことで、値がnullや空であるフィールドをJSON出力から除外し、無駄のないクリーンなJSONを生成できます。
@JsonIncludeアノテーションの主な設定値
- Include.NON_NULL: null以外の値を持つプロパティのみJSONに含めます。nullのフィールドは出力されません。
- Include.NON_EMPTY: 空でないプロパティのみJSONに含めます。nullに加えて、空文字列("")やサイズ0のコレクション・マップなども除外されます。
コード例
以下の例では、firstNameにnull、lastNameに空文字列を渡しています。firstNameにはInclude.NON_NULL、lastNameにはInclude.NON_EMPTYを指定しているため、どちらのフィールドもJSONに出力されません。
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
public class IgnoreNullAndEmptyFieldTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
Employee employee = new Employee(115, null, ""); // nullと空文字列を渡す
String result = mapper.writeValueAsString(employee);
System.out.println(result);
}
}
// Employeeクラス
class Employee {
private int id;
@JsonInclude(Include.NON_NULL)
private String firstName;
@JsonInclude(Include.NON_EMPTY)
private String lastName;
public Employee(int id, String firstName, String lastName) {
super();
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}実行結果
nullのfirstNameと空文字列のlastNameが除外され、値を持つidだけが出力されていることがわかります。
{
"id" : 115
}補足:クラス全体に適用する場合
フィールドごとに個別指定する代わりに、クラス宣言の直前に@JsonInclude(Include.NON_NULL)などを付与すると、そのクラスのすべてのフィールドに対して一括で適用できます。また、ObjectMapperに対してmapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)を設定すれば、アプリケーション全体のデフォルト動作として指定することも可能です。用途に応じて使い分けるとよいでしょう。
-
Java OpenCVライブラリを使って画像の明るさを変更する方法
OpenCVのorg.opencv.core.Matクラスが提供するconvertTo()メソッドを使うと、行列に対して必要な演算を実行し、画像のコントラストや明るさを簡単に調整できます。このメソッドは以下の4つのパラメータを受け取ります。 mat − 計算結果を格納するための空の行列。ソース行列と同じサイズ・型である必要があります。 rtype − 出力行列の型を指定する整数値。負の値を指定した場合は、ソース行列と同じ型になります。 alpha − ゲイン値。0より大きい値を指定します(デフォルトは1)。この値を変更するとコントラストに影響します。 beta − バイアス値(デフォルトは
-
【Java】OpenCVライブラリを使って画像のコントラストを変更する方法
画像の明るさやコントラストの増減は、画像のピクセル値を変換することで実現できます。この変換は、次のような数式で表されます。g(i, j) = α ・ f(i, j) + βここで、各要素の意味は以下のとおりです。(i, j):ピクセルの位置(座標)α(ゲイン)と β(バイアス):変換のパラメータ一般に、ゲインパラメータ α が画像のコントラストを制御し、バイアスパラメータ β が画像の明るさを制御します。convertTo() メソッドについてorg.opencv.core.Mat クラスの convertTo() メソッドを使うと、指定した行列に対して必要な計算を実行し、画像のコントラストや