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

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の構造が不正な場合や、オブジェクトへのマッピングに失敗した場合には、それぞれ JsonParseExceptionJsonMappingException がスローされる点に注意してください。

サンプルコード

以下の例では、まず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オブジェクトの相互変換が可能です。

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

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

  2. 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;