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

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を用意しておくと安全です。
  1. 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

  2. JavaでMapをJSONオブジェクトに変換する方法を解説

    JSON(JavaScript Object Notation)は、軽量でテキストベース、かつ言語に依存しないデータ交換フォーマットです。JSONはオブジェクトと配列という2種類の構造化データを表現できます。オブジェクトはキー/バリュー(key/value)ペアの順序を持たないコレクションであり、配列は値の順序付きシーケンスです。 Javaでは、org.json.simple.JSONValue クラスが提供する静的メソッド toJSONString() を使うことで、MapをJSONオブジェクトへ簡単に変換できます。このクラスには、以下の2つの重要な静的メソッドが用意されています。 wri