JavaのJacksonライブラリでJSONをJavaオブジェクトに変換する方法
Jacksonライブラリの中核となるのが ObjectMapper クラスです。このクラスが提供する readValue() メソッドを使用すると、JSON形式の文字列をJavaオブジェクトへ変換(デシリアライズ)することができます。逆に、JavaオブジェクトからJSON文字列を生成したい場合は writeValueAsString() メソッドを利用します。
readValue() メソッドの構文
public <T> readValue(String content, JavaType valueType) throws IOException, JsonParseException, JsonMappingException
第一引数には変換元のJSON文字列を、第二引数にはマッピング先のJavaクラス(またはJavaType)を指定します。JSONの構造が不正な場合や、オブジェクトへのマッピングに失敗した場合には、それぞれ JsonParseException や JsonMappingException がスローされる点に注意してください。
サンプルコード
以下の例では、まずEmployeeオブジェクトを作成してJSON文字列にシリアライズし、その後そのJSON文字列を再びEmployeeオブジェクトへデシリアライズしています。
import java.io.*;
import java.util.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
public class JSONToJavaObjectTest {
public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {
// Employeeオブジェクトを作成
Employee emp1 = new Employee();
emp1.setFirstName("Raja");
emp1.setLastName("Ramesh");
emp1.setId(115);
emp1.getTechnologies().add("Java");
emp1.getTechnologies().add("Selenium");
emp1.getTechnologies().add("Spark");
// JavaオブジェクトをJSON文字列にシリアライズ
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp1);
System.out.println(jsonStr);
// JSON文字列をJavaオブジェクトにデシリアライズ
System.out.println("Deserializing JSON to Object:");
Employee emp2 = mapper.readValue(jsonStr, Employee.class);
System.out.println(emp2.getId() + " " + emp2.getFirstName() + " " + emp2.getLastName() + " " + emp2.getTechnologies());
}
}
// Employeeクラス
class Employee {
private int id;
private String firstName;
private String lastName;
private List technologies = new ArrayList<>();
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;
}
public List getTechnologies() {
return technologies;
}
public void setTechnologies(List technologies) {
this.technologies = technologies;
}
}実行結果
{
"id" : 115,
"firstName" : "Raja",
"lastName" : "Ramesh",
"technologies" : [ "Java", "Selenium", "Spark" ]
}
Deserializing JSON to Object:
115 Raja Ramesh [Java, Selenium, Spark]このように、mapper.readValue(jsonStr, Employee.class) を呼び出すだけで、JSON文字列の各フィールドがEmployeeクラスの対応するプロパティに自動的にマッピングされます。Jacksonはゲッター・セッターの命名規則に基づいてフィールドを判定するため、POJO(Plain Old Java Object)さえ用意しておけば、特別な設定なしでJSONとJavaオブジェクトの相互変換が可能です。
-
JavaでMapをJSONオブジェクトに変換する方法を解説
JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONはオブジェクトと配列という2種類の構造化データを表現できます。オブジェクトはキー/バリュー(key/value)ペアの順序を持たないコレクションであり、配列は値の順序付きシーケンスです。 Javaでは、org.json.simple.JSONValue クラスが提供する静的メソッド toJSONString() を使うことで、MapをJSONオブジェクトへ簡単に変換できます。このクラスには、以下の2つの重要な静的メソッドが用意されています。 wri
-
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;