JavaでJacksonを使ってJSONオブジェクトを列挙型(Enum)に変換する方法
JSONObjectは、文字列からテキストを解析してMap形式のオブジェクトを生成できます。一方、列挙型(Enum)は定数の集合を定義するために使用されます。数値やテキストデータとして表現できない、あらかじめ決められた値のリストが必要な場合に列挙型が役立ちます。
JSONオブジェクトを列挙型に変換するには、ObjectMapperクラスのreadValue()メソッドを使用します。このメソッドは、JSON文字列を指定したJavaクラス(POJO)にデシリアライズする際に、フィールドの型が列挙型であれば自動的に対応するEnum定数へとマッピングしてくれます。
以下の例では、Jacksonライブラリを使用して、JSONオブジェクトをJavaの列挙型に変換(デシリアライズ)する方法を示します。
コード例
import com.fasterxml.jackson.databind.*;
public class JSONToEnumTest {
public static void main(String arg[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Employee emp = mapper.readValue("{\"jobType\":\"CONTRACT\"}", Employee.class);
System.out.println(emp.getJobType());
}
public static class Employee {
private JobType jobType;
public JobType getJobType() {
return jobType;
}
public void setJobType(JobType jobType) {
this.jobType = jobType;
}
}
public enum JobType {
PERMANENT,
CONTRACT,
}
}
実行結果
CONTRACT
この例では、JSON文字列{"jobType":"CONTRACT"}をEmployeeクラスにデシリアライズしています。jobTypeフィールドはJobTypeという列挙型として宣言されているため、JacksonはJSON内の文字列値「CONTRACT」を自動的に対応するEnum定数JobType.CONTRACTに変換します。
補足:未知の値への対処
なお、JSONに含まれる値が列挙型に存在しない場合、デフォルトではInvalidFormatExceptionがスローされます。未知の値をnullとして扱いたい場合は、READ_UNKNOWN_ENUM_VALUES_AS_NULL機能を有効にするか、@JsonCreatorや@JsonValueアノテーションを活用することで、より柔軟な変換処理を実装できます。
-
JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)
このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの2つを使って解説します。 サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。 Person.java import java.util.List; import java.util.Map; public class Person { String name; Integer age;
-
JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)
JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。 この記事では、代表的なライブラリであるJackson、Gson、org.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。 Jacksonを使ってJavaのMapをJSONに変換する 最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。 Jacksonライブラリを使用するには