このチュートリアルでは、https://github.com/google/gson[Gson]を使用してJavaオブジェクトをJSONに/JSONから変換する方法を説明します。


P.Sすべての例は、Gson 2.6.2

1.クイックリファレンス

1.1

toJson()

– JavaオブジェクトをJSONに変換する

    Gson gson = new Gson();
    Staff obj = new Staff();

   //1. Java object to JSON, and save into a file
    gson.toJson(obj, new FileWriter("D:\\file.json"));

   //2. Java object to JSON, and assign to a String
    String jsonInString = gson.toJson(obj);

1.2

fromJson()

– JSONをJavaオブジェクトに変換する

    Gson gson = new Gson();

   //1. JSON to Java object, read it from a file.
    Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class);

   //2. JSON to Java object, read it from a Json String.
    String jsonInString = "{'name' : 'mkyong'}";
    Staff staff = gson.fromJson(jsonInString, Staff.class);

   //JSON to JsonElement, convert to String later.
    JsonElement json = gson.fromJson(new FileReader("D:\\file.json"), JsonElement.class);
    String result = gson.toJson(json);

2. Gsonの依存関係

Gsonを使用するには、次の依存関係を宣言します。

pom.xml

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6.2</version>
    </dependency>

3. POJO

後でテストするための簡単なPOJO。

staff.java

package com.mkyong.json;

import java.math.BigDecimal;
import java.util.List;

public class Staff {

    private String name;
    private int age;
    private String position;
    private BigDecimal salary;
    private List<String> skills;

   //...

4. JavaオブジェクトからJSONへ

Gsonの例では、 `Staff`オブジェクトをJSON形式の文字列に変換します。

GsonExample.java

package com.mkyong.json;

import com.google.gson.Gson;

import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class GsonExample {

    public static void main(String[]args) {

        Staff staff = createDummyObject();

       //1. Convert object to JSON string
        Gson gson = new Gson();
        String json = gson.toJson(staff);
        System.out.println(json);

       //2. Convert object to JSON string and save into a file directly
        try (FileWriter writer = new FileWriter("D:\\staff.json")) {

            gson.toJson(staff, writer);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static Staff createDummyObject() {

        Staff staff = new Staff();

        staff.setName("mkyong");
        staff.setAge(35);
        staff.setPosition("Founder");
        staff.setSalary(new BigDecimal("10000"));

        List<String> skills = new ArrayList<>();
        skills.add("java");
        skills.add("python");
        skills.add("shell");

        staff.setSkills(skills);

        return staff;

    }

}

出力

{"name":"mkyong","age":35,"position":"Founder","salary":10000,"skills":["java","python","shell"]}
//new file is created in D:\\staff.json"

JSONからJavaオブジェクトへ

Gsonの例では、ファイルからJSONを読み取り、それをJavaオブジェクトに戻します。

Gson2Example.java

package com.mkyong.json;

import com.google.gson.Gson;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class Gson2Example {

    public static void main(String[]args) {

        Gson gson = new Gson();

        try (Reader reader = new FileReader("D:\\staff.json")) {

           //Convert JSON to Java Object
            Staff staff = gson.fromJson(reader, Staff.class);
            System.out.println(staff);

           //Convert JSON to JsonElement, and later to String
           /** JsonElement json = gson.fromJson(reader, JsonElement.class);
            String jsonInString = gson.toJson(json);
            System.out.println(jsonInString);** /
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

出力

Staff{name='mkyong', age=35, position='Founder', salary=10000, skills=[java, python, shell]}

6.よくある質問

いくつかは一般的に質問します。

6.1「TypeToken」を使用してJSON配列を `List`に変換する

    String json = "[{\"name\":\"mkyong\"}, {\"name\":\"laplap\"}]";
    List<Staff> list = gson.fromJson(json, new TypeToken<List<Staff>>(){}.getType());
    list.forEach(x -> System.out.println(x));

6.2 JSONを `Map`に変換する

    String json = "{\"name\":\"mkyong\", \"age\":33}";
    Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
    map.forEach((x,y)-> System.out.println("key : " + x + " , value : " + y));

6.3リンク://java/how-to-enable-pretty-print-json-output-gson/[GsonのJSON印刷機能を有効にする]

参考文献

リンク://タグ/gson/[gson]リンク://タグ/java-json-tutorial/[java json
チュートリアル]リンク://tag/json/[json]