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

Flexjsonを使ってReaderストリームからJavaオブジェクトを逆シリアル化する方法

Flexjsonは、JavaオブジェクトをJSON形式へシリアライズしたり、その逆にJSONからJavaオブジェクトへデシリアライズしたりするための軽量ライブラリです。

JSONDeserializerクラスのdeserialize()メソッドを使用すると、ReaderストリームからJavaオブジェクトを逆シリアル化できます。このメソッドはJSON入力としてReaderクラスのインスタンスを受け取るため、StringReaderやFileReaderなど任意のReader実装クラスを渡すことが可能です。そのため、文字列だけでなくファイルやネットワークストリームから読み込んだデータの変換にも柔軟に対応できます。

構文

public T deserialize(Reader input)

コード例

import java.io.*;
import flexjson.JSONDeserializer;

public class JSONDeserializeReaderTest {
    public static void main(String[] args) {
        JSONDeserializer<Student> deserializer = new JSONDeserializer<Student>();
        String jsonStr =
                "{" +
                "\"firstName\": \"Adithya\"," +
                "\"lastName\": \"Sai\"," +
                "\"age\": 25," +
                "\"address\": \"Hyderabad\"," +
                "\"class\": \"Student\"" +
                "}";
        Student student = deserializer.deserialize(new StringReader(jsonStr));
        System.out.println(student);
    }
}

// Studentクラス
class Student {
    private String firstName;
    private String lastName;
    private int age;
    private String address;

    public Student() {}

    public Student(String firstName, String lastName, int age, String address) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.address = address;
    }

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
               "firstName = " + firstName +
               ", lastName = " + lastName +
               ", age = " + age +
               ", address = " + address +
               " ]";
    }
}

実行結果

Student[ firstName = Adithya, lastName = Sai, age = 25, address = Hyderabad ]

ポイント

  • deserialize()はジェネリックメソッドのため、JSONDeserializer<Student>のように型パラメータを指定すれば、明示的なキャストなしで型安全にオブジェクトを取得できます。
  • JSON内のキー名は、対象クラスのフィールド名(または対応するsetterメソッド名)と一致させることが基本です。
  • 引数にはStringReader以外にも、FileReaderやInputStreamReaderなど、java.io.Readerのサブクラスであれば自由に指定できます。
  1. Flexjsonを使ってJSON文字列をJavaオブジェクトに逆シリアル化する方法

    Flexjsonは、JavaオブジェクトとJSON形式の間でシリアライズ(直列化)およびデシリアライズ(逆直列化)を行うための軽量なライブラリです。オブジェクトのディープコピー(深いコピー)とシャローコピー(浅いコピー)の両方をサポートしている点が特徴です。 Flexjsonを使ってJavaプログラムを実行するには、あらかじめflexjsonパッケージをインポートしておく必要があります。 JSONからJavaオブジェクトへの変換(デシリアライズ)には、JSONDeserializerクラスのdeserialize()メソッドを使用します。このメソッドはJSON文字列を入力として受け取り、そのJ

  2. Javaでオブジェクトをシリアライズ・デシリアライズする方法をわかりやすく解説

    Javaにおけるシリアライズ(直列化)とは、オブジェクトの状態をバイトストリームへと変換するプロセスのことです。オブジェクトがシリアライズ可能になるためには、そのクラスまたは親クラスがSerializableインターフェース、もしくはExternalizableインターフェースを実装している必要があります。一方、デシリアライズとは、シリアライズされたデータを再びオブジェクトのコピーとして復元するプロセスを指します。 transientキーワードの役割 シリアライズの際に、特定の変数の状態をバイトストリームに書き込みたくない場合は、transientキーワードを使用します。JVMはtransie