Flexjsonを使ってJSON文字列をJavaオブジェクトに逆シリアル化する方法
Flexjsonは、JavaオブジェクトとJSON形式の間でシリアライズ(直列化)およびデシリアライズ(逆直列化)を行うための軽量なライブラリです。オブジェクトのディープコピー(深いコピー)とシャローコピー(浅いコピー)の両方をサポートしている点が特徴です。
Flexjsonを使ってJavaプログラムを実行するには、あらかじめflexjsonパッケージをインポートしておく必要があります。
JSONからJavaオブジェクトへの変換(デシリアライズ)には、JSONDeserializerクラスのdeserialize()メソッドを使用します。このメソッドはJSON文字列を入力として受け取り、そのJSON表現から静的に型付けされたオブジェクトグラフを生成します。
デフォルトでは、JSONデータ内のclassプロパティを参照することで、型情報を持たない汎用的なJSONデータを特定のJava型へマッピングします。
構文
public T deserialize(String input)
Mavenプロジェクトで利用する場合は、pom.xmlに以下の依存関係を追加してください。
<dependency>
<groupId>net.sf.flexjson</groupId>
<artifactId>flexjson</artifactId>
<version>3.3</version>
</dependency>
例:JSONをJavaオブジェクトにデシリアライズする
以下のプログラムでは、JSON文字列をStudentクラスのオブジェクトに変換しています。
import flexjson.*;
public class DeserializeJSONTest {
public static void main(String[] args) {
JSONDeserializer<Student> deserializer = new JSONDeserializer<Student>();
String jsonStr =
"{" +
"\"firstName\": \"Ravi\"," +
"\"lastName\": \"Chandra\"," +
"\"age\": 35," +
"\"class\": \"Student\"," +
"\"salary\": 50000.00," +
"}";
Student student = deserializer.deserialize(jsonStr);
System.out.println(student);
}
}
// Studentクラス
class Student {
private String firstName;
private String lastName;
private int age;
private double salary;
public Student() {}
public Student(String firstName, String lastName, int age, double salary) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.salary = salary;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String toString() {
return "Student[ " +
"firstName = " + firstName +
", lastName = " + lastName +
", age = " + age +
", salary = " + salary +
" ]";
}
}
実行結果
Student[ firstName = Ravi, lastName = Chandra, age = 35, salary = 50000.0 ]
ポイントまとめ
- JSONDeserializerクラスのインスタンスを生成し、deserialize()メソッドにJSON文字列を渡すだけで変換が可能です。
- JSONデータ内の「class」プロパティによってターゲットとなるJavaクラスが決定されるため、JSON側にクラス名を含めておく必要があります。
- 対象クラスには引数なしのコンストラクタと各フィールドに対応するgetter/setterを用意しておくと安全です。
-
JavaのGsonライブラリを使ってJavaオブジェクトをJSONに変換する方法
Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを利用することで、JSONの生成はもちろん、BeanやJavaオブジェクトを簡単にJSONオブジェクトへ変換できます。JavaオブジェクトをJSON文字列に変換するには、Gsonクラスが提供するtoJson()メソッドを呼び出すだけです。 toJson()メソッドの構文 public java.lang.String toJson(java.lang.Object src) 引数には変換元となる任意のJavaオブジェクトを渡し、戻り値としてそのオブジェクトをシリアライズしたJSON形式の文字列が返されます。Gson
-
JavaでMapをJSONオブジェクトに変換する方法を解説
JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONはオブジェクトと配列という2種類の構造化データを表現できます。オブジェクトはキー/バリュー(key/value)ペアの順序を持たないコレクションであり、配列は値の順序付きシーケンスです。 Javaでは、org.json.simple.JSONValue クラスが提供する静的メソッド toJSONString() を使うことで、MapをJSONオブジェクトへ簡単に変換できます。このクラスには、以下の2つの重要な静的メソッドが用意されています。 wri