Comment convertir un objet Java en JSON (Gson)

Gson - Comment convertir un objet Java vers / depuis JSON

Dans ce tutoriel, nous allons vous montrer comment utiliserGson pour convertir un objet Java vers / depuis JSON.

P.S All examples are tested by Gson 2.8.5

Note
JSON signifie JavaScript Object Notation, c'est un format léger d'échange de données. Vous pouvez voir que de nombreuses applications Java ont commencé à abandonner le format XML et à utiliser JSON comme nouveau format d'échange de données. Java est tout au sujet de l'objet, souvent, vous devez convertir un objet au format JSON pour l'échange de données ou vice versa.

Note
Jackson est un autre processeur JSON hautes performances, essayez ceciJackson 2 – Java object to / from JSON

1. Télécharger Gson

pom.xml

    
        com.google.code.gson
        gson
        2.8.5
    

2. Gson Basic

toJson() - Convertit les objets Java en JSON

    Gson gson = new Gson();

    Staff obj = new Staff();

    // 1. Java object to JSON file
    gson.toJson(obj, new FileWriter("C:\\projects\\staff.json"));

    // 2. Java object to JSON string
    String jsonInString = gson.toJson(obj);

fromJson() - Convertit JSON en objets Java

    Gson gson = new Gson();

    // 1. JSON file to Java object
    Staff staff = gson.fromJson(new FileReader("C:\\projects\\staff.json"), Staff.class);

    // 2. JSON string to Java object
    String json = "{'name' : 'example'}";
    Staff staff = gson.fromJson(json, Staff.class);

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

3. Objets Java en JSON

3.1 A Java POJO, later uses this for conversion.

Staff.java

package com.example;

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

public class Staff {

    private String name;
    private int age;
    private String[] position;              // array
    private List skills;            // list
    private Map salary; // map

    //getters and setters
}

3.2 In Gson, we can use gson.toJson() to convert Java objects to JSON.

GsonExample1.java

package com.example;

import com.google.gson.Gson;

import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class GsonExample1 {

    public static void main(String[] args) {

        Gson gson = new Gson();

        Staff staff = createStaffObject();

        // Java objects to String
        // String json = gson.toJson(staff);

        // Java objects to File
        try (FileWriter writer = new FileWriter("C:\\projects\\staff.json")) {
            gson.toJson(staff, writer);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static Staff createStaffObject() {

        Staff staff = new Staff();

        staff.setName("example");
        staff.setAge(35);
        staff.setPosition(new String[]{"Founder", "CTO", "Writer"});
        Map salary = new HashMap() {{
            put("2010", new BigDecimal(10000));
            put("2012", new BigDecimal(12000));
            put("2018", new BigDecimal(14000));
        }};
        staff.setSalary(salary);
        staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));

        return staff;

    }

}

Par défaut, Gson écrit JSON en mode compact.

C:\projects\staff.json

{"name":"example","age":35,"position":["Founder","CTO","Writer"],"skills":["java","python","node","kotlin"],"salary":{"2018":14000,"2012":12000,"2010":10000}}

Pour activer le joli mode d'impression:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

    Gson gson = new GsonBuilder().setPrettyPrinting().create();

Sortie

C:\projects\staff.json

{
  "name": "example",
  "age": 35,
  "position": [
    "Founder",
    "CTO",
    "Writer"
  ],
  "skills": [
    "java",
    "python",
    "node",
    "kotlin"
  ],
  "salary": {
    "2018": 14000,
    "2012": 12000,
    "2010": 10000
  }
}

4. JSON à des objets Java

4.1 In Gson, we can use gson.fromJson to convert JSON back to Java objects.

GsonExample2.java

package com.example;

import com.google.gson.Gson;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class GsonExample2 {

    public static void main(String[] args) {

        Gson gson = new Gson();

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

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

            // print staff object
            System.out.println(staff);

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

    }

}

Sortie

Staff{name='example', age=35, position=[Founder, CTO, Writer], skills=[java, python, node, kotlin], salary={2018=14000, 2012=12000, 2010=10000}}

4.2 Convert to JsonElement

GsonExample3.java

package com.example;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class GsonExample3 {

    public static void main(String[] args) {

        // pretty print
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

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

            // 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();
        }


    }

}

Sortie

{
  "name": "example",
  "age": 35,
  "position": [
    "Founder",
    "CTO",
    "Writer"
  ],
  "skills": [
    "java",
    "python",
    "node",
    "kotlin"
  ],
  "salary": {
    "2018": 14000,
    "2012": 12000,
    "2010": 10000
  }
}

Note
Plus deGson examples