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

【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_NULLlastNameには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)を設定すれば、アプリケーション全体のデフォルト動作として指定することも可能です。用途に応じて使い分けるとよいでしょう。

  1. Java OpenCVライブラリを使って画像の明るさを変更する方法

    OpenCVのorg.opencv.core.Matクラスが提供するconvertTo()メソッドを使うと、行列に対して必要な演算を実行し、画像のコントラストや明るさを簡単に調整できます。このメソッドは以下の4つのパラメータを受け取ります。 mat − 計算結果を格納するための空の行列。ソース行列と同じサイズ・型である必要があります。 rtype − 出力行列の型を指定する整数値。負の値を指定した場合は、ソース行列と同じ型になります。 alpha − ゲイン値。0より大きい値を指定します(デフォルトは1)。この値を変更するとコントラストに影響します。 beta − バイアス値(デフォルトは

  2. 【Java】OpenCVライブラリを使って画像のコントラストを変更する方法

    画像の明るさやコントラストの増減は、画像のピクセル値を変換することで実現できます。この変換は、次のような数式で表されます。g(i, j) = α ・ f(i, j) + βここで、各要素の意味は以下のとおりです。(i, j):ピクセルの位置(座標)α(ゲイン)と β(バイアス):変換のパラメータ一般に、ゲインパラメータ α が画像のコントラストを制御し、バイアスパラメータ β が画像の明るさを制御します。convertTo() メソッドについてorg.opencv.core.Mat クラスの convertTo() メソッドを使うと、指定した行列に対して必要な計算を実行し、画像のコントラストや