[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-

Überblick

Ich werde die Methoden von JSON → Java, Java → JSON zusammenfassen, die häufig bei der Verwendung der Web-API in Java verwendet werden Außerdem wird im nächsten Artikel zusammengefasst, wie HTTP POST und HTTP GET JSON ausgeführt werden.

Kürzester Kurs - Denken mit JSON-

Betrachten Sie den kürzesten Kurs, wenn die JSON-Zeichenfolge, die Sie analysieren möchten, bereits vorhanden ist, z. B. beim Aufrufen einer externen API. Da die Modellklasse ** Automatisch generierte Site ** verwendet wird, ist es in Ordnung, wenn eine JSON-Zeichenfolge vorhanden ist (das JSON-Schema ist noch besser).

Beispiel-JSON-Zeichenfolge: Beispiel.json


{
    "person": {
        "firstName": "John",
        "lastName": "Doe",
        "address": "NewYork",
        "pets": [
            {"type": "Dog", "name": "Jolly"},
            {"type": "Cat", "name": "Grizabella"},
            {"type": "Fish", "name": "Nimo"}
        ]
    }
}

GSON und Jackson

Wenn es um JSON-Operationen in Java geht, verwende ich oft zwei Bibliotheken, ** GSON ** und ** Jackson **. Ich kann nicht sagen, welches besser ist, also werde ich beides erklären.

GSON [Bibliothek] von Google (https://github.com/google/gson) image.png

Jackson Leistungsorientierte Bibliothek image.png

GSON Edition

Ordnen Sie JSON mit ** GSON ** Java zu

Beginnen wir mit GSON. Wenn Sie einen Java-Parser aus rohen JSON-Zeichenfolgen erstellen möchten, ist es einfach, jsonschema2pojo zu verwenden. Ich werde es also versuchen.

Klicken Sie hier, um den Quellcode dieses Kapitels anzuzeigen https://github.com/riversun/java-json-gson-jackson-http/tree/master/src/main/java/com/example/gson

GSON-Bibliotheksabhängigkeiten

Die Methode zum Angeben der GSON-Bibliothek lautet wie folgt

■ Die neueste Bibliothek von GSON (Maven Repository) https://mvnrepository.com/artifact/com.google.code.gson/gson

■ Einstellungsbeispiel für GSON ** maven **

pom.xml


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

■ Beispiel für die Einstellung von GSON ** gradle **

build.gradle


compile 'com.google.code.gson:gson:2.8.5'

(1) Generieren Sie automatisch eine Modellklasse (POJO) mit jsonschema2pojo

Gehen Sie zur folgenden Site und fügen Sie den obigen JSON ein http://www.jsonschema2pojo.org/

  • Wenn Sie sich mit einer externen Site nicht wohl fühlen, können Sie dies selbst mit Library tun.

image.png

■ Stellen Sie auf der Site Folgendes ein und drücken Sie ** Zip **, um automatisch eine Modellklasse zu generieren

Paket: ** com.example.gson ** (Paketname, was auch immer, aber die Quelle wird automatisch mit diesem Paketnamen generiert) Klassenname: ** Modell ** (Pojos erstklassiger Name) Target language:Java Quelltyp: ** JSON ** (Modellklasse aus der JSON-Zeichenfolge selbst schätzen) Anmerkungsstil: ** Gson ** (GSON als Parser verwenden) ☑ ** Zusätzliche Eigenschaften zulassen ** (JSON kann mit unbekannten gemischt werden)

Eine ** Zip ** -Datei wird generiert. Wenn Sie sie herunterladen und öffnen, werden automatisch drei Java-Dateien generiert, wie unten gezeigt.

(2) ** Überprüfen Sie die automatisch generierte ** Modellklasse (POJO).

■ ** Model.java ** ・ ・ ・ Höchste Klasse

Model.java


package com.example.gson;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Model {
    @SerializedName("person")
    @Expose
    public Person person;
}

■ ** Person.java ** pets ・ ・ ** "Haustiere": [] **, das als Array angegeben wird, wird zu ** Liste **

Person.java


package com.example.gson;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Person {
    @SerializedName("firstName")
    @Expose
    public String firstName;
    @SerializedName("lastName")
    @Expose
    public String lastName;
    @SerializedName("address")
    @Expose
    public String address;
    @SerializedName("pets")
    @Expose
    public List<Pet> pets = null;
}

Pet.java

Pet.java


package com.example.gson;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Pet {
    @SerializedName("type")
    @Expose
    public String type;
    @SerializedName("name")
    @Expose
    public String name;
}

(3) Konvertieren Sie ** JSON nach Java ** mit GSON

Konvertieren Sie von JSON nach Java, dh laden Sie eine JSON-Zeichenfolge mit GSON in eine Java-Modellklasse Der Schlüsselcode lautet wie folgt

Gson gson = new Gson();
Model model = gson.fromJson(json, Model.class);

Der ganze Code sieht so aus

GsonJson2Java.java

GsonJson2.java


package com.example.gson;

import com.google.gson.Gson;

public class GsonJson2Java {
    public static void main(String[] args) {
        String json = 
                "{" +
                "    \"person\": {" +
                "        \"firstName\": \"John\"," +
                "        \"lastName\": \"Doe\"," +
                "        \"address\": \"NewYork\"," +
                "        \"pets\": [" +
                "            {\"type\": \"Dog\", \"name\": \"Jolly\"}," +
                "            {\"type\": \"Cat\", \"name\": \"Grizabella\"}," +
                "            {\"type\": \"Fish\", \"name\": \"Nimo\"}" +
                "        ]" +
                "    }" +
                "}";

        Gson gson = new Gson();
        Model model = gson.fromJson(json, Model.class);

        System.out.println("firstName:" + model.person.firstName);
        System.out.println("lastName:" + model.person.lastName);
        System.out.println("address:" + model.person.address);
        System.out.println("1st pet:" + model.person.pets.get(0).name);
    }
}

Ausführungsergebnis


firstName:John
lastName:Doe
address:NewYork
1st pet:Jolly

(4) Konvertieren Sie ** Java → JSON ** mit GSON

Lassen Sie uns jetzt JSON von Java aus ausführen. Konvertieren Sie die Java-Modellklasse (POJO) in JSON.

Gson gson = new Gson();
String json = gson.toJson(model);

GsonJava2Json.java

GsonJava2Json.java


package com.example.gson;

import java.util.ArrayList;
import com.google.gson.Gson;

public class GsonJava2Json {
    public static void main(String[] args) {

        Model model = new Model();
        model.person = new Person();
        model.person.firstName = "John";
        model.person.lastName = "Machen";
        model.person.address = "New York";

        model.person.pets = new ArrayList<Pet>();

        Pet pet1 = new Pet();
        pet1.type = "Hund";
        pet1.name = "Lustig";
        model.person.pets.add(pet1);

        Pet pet2 = new Pet();
        pet2.type = "Katze";
        pet2.name = "Grizabella";
        model.person.pets.add(pet2);

        Pet pet3 = new Pet();
        pet3.type = "Fisch";
        pet3.name = "Nimo";
        model.person.pets.add(pet3);

        Gson gson = new Gson();
        String json = gson.toJson(model);

        System.out.println(json);
    }
}

Wenn dies ausgeführt wurde, konnte JSON wie folgt aus der Modellklasse ausgegeben werden.

Ausführungsergebnis


{"person":{"firstName":"John","lastName":"Machen","address":"New York","pets":[{"type":"Hund","name":"Lustig"},{"type":"Katze","name":"Grizabella"},{"type":"Fisch","name":"Nimo"}]}}

(5) Formatieren (Pretty Printing) und Ausgeben von JSON mit GSON

Wenn Sie dies tun, wird der JSON sauber eingerückt und formatiert

Gson gson2 = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = gson2.toJson(model);
System.out.println(prettyJson);

Ausführungsergebnis

{
  "person": {
    "firstName": "John",
    "lastName": "Machen",
    "address": "New York",
    "pets": [
      {
        "type": "Hund",
        "name": "Lustig"
      },
      {
        "type": "Katze",
        "name": "Grizabella"
      },
      {
        "type": "Fisch",
        "name": "Nimo"
      }
    ]
  }
}

Jackson Edition

Jackson hat die Serien 1.x und 2.x, verwendet jedoch die Serien 2.x.

Ordnen Sie JSON mit ** Jackson ** Java zu

Klicken Sie hier, um den Quellcode dieses Kapitels anzuzeigen https://github.com/riversun/java-json-gson-jackson-http/tree/master/src/main/java/com/example/jackson

Abhängigkeiten der Jackson-Bibliothek

Die Methode zum Spezifizieren der Bibliothek von Jackson ist wie folgt

■ Jacksons neueste Bibliothek (Maven Repository) https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind

■ Jacksons ** Maven ** -Einstellungsbeispiel

pom.xml


<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.8</version>
</dependency>

■ Jacksons ** Gradle ** -Einstellungsbeispiel

build.gradle


compile 'com.fasterxml.jackson.core:jackson-databind:2.9.8'

(1) Generieren Sie automatisch eine Modellklasse (POJO) mit jsonschema2pojo

Gehen Sie zur folgenden Site und fügen Sie den obigen JSON ein http://www.jsonschema2pojo.org/

image.png

■ Stellen Sie auf der Site Folgendes ein und drücken Sie ** Zip **, um automatisch eine Modellklasse zu generieren

Paket: ** com.example. jackson </ font> ** (Paketname, was auch immer, aber die Quelle wird automatisch mit diesem Paketnamen generiert) Klassenname: ** Modell ** (Pojos erstklassiger Name) Target language:Java Quelltyp: ** JSON ** (Modellklasse aus der JSON-Zeichenfolge selbst schätzen) Anmerkungsstil: ** jackson 2.x ** </ font> (verwenden Sie Jackson 2.x als Parser) ☑ ** Zusätzliche Eigenschaften zulassen ** (JSON kann mit unbekannten gemischt werden)

Eine ** Zip ** -Datei wird generiert. Wenn Sie sie herunterladen und öffnen, werden automatisch drei Java-Dateien generiert, wie unten gezeigt.

(2) ** Überprüfen Sie die automatisch generierte ** Modellklasse (POJO).

■ ** Model .java ** ・ ・ ・ Die höchste Klasse. Es ist charakteristisch, dass ** @JsonAnyGetter ** zusätzliche Eigenschaften akzeptiert. Aus diesem Grund wird es auch redundanter als GSON.

Model.java


package com.example.jackson;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "person"
})
public class Model {
    @JsonProperty("person")
    public Person person;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
}

■ ** Person.java ** J ・ ・ ** @JsonPropertyOrder ** kann verwendet werden, um die Reihenfolge des Erscheinungsbilds einzuschränken. Ein Array wie ** "Haustiere": [] ** wird zu ** Liste **.

Person.java


package com.example.jackson;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "firstName",
    "lastName",
    "address",
    "pets"
})
public class Person {
    @JsonProperty("firstName")
    public String firstName;
    @JsonProperty("lastName")
    public String lastName;
    @JsonProperty("address")
    public String address;
    @JsonProperty("pets")
    public List<Pet> pets = null;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
}

Pet.java

Pet.java


package com.example.jackson;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "type",
    "name"
})
public class Pet {
    @JsonProperty("type")
    public String type;
    @JsonProperty("name")
    public String name;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
}

(3) Verwenden Sie Jackson, um ** JSON in Java ** zu konvertieren

Konvertieren Sie von JSON nach Java, dh verwenden Sie Jackson, um eine JSON-Zeichenfolge in eine Java-Modellklasse zu laden Der Schlüsselcode lautet wie folgt

ObjectMapper mapper = new ObjectMapper();
Model model = mapper.readValue(json, Model.class);

Der ganze Code sieht so aus

JacksonJson2Java.java

JacksonJson2Java.java


package com.example.jackson;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonJson2Java {
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        String json = "{" +
                "    \"person\": {" +
                "        \"firstName\": \"John\"," +
                "        \"lastName\": \"Doe\"," +
                "        \"address\": \"NewYork\"," +
                "        \"pets\": [" +
                "            {\"type\": \"Dog\", \"name\": \"Jolly\"}," +
                "            {\"type\": \"Cat\", \"name\": \"Grizabella\"}," +
                "            {\"type\": \"Fish\", \"name\": \"Nimo\"}" +
                "        ]" +
                "    }" +
                "}";

        ObjectMapper mapper = new ObjectMapper();
        Model model = mapper.readValue(json, Model.class);

        System.out.println("firstName:" + model.person.firstName);
        System.out.println("lastName:" + model.person.lastName);
        System.out.println("address:" + model.person.address);
        System.out.println("1st pet:" + model.person.pets.get(0).name);
    }
}

(4) Konvertieren Sie ** Java → JSON ** mit Jackson

Lassen Sie uns jetzt JSON von Java aus ausführen. Konvertieren Sie die Java-Modellklasse (POJO) in JSON.

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(model);

JacksonJava2Json.java

JacksonJava2Json.java


package com.example.jackson;
import java.util.ArrayList;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonJava2Json {
    public static void main(String[] args) throws JsonProcessingException {

        Model model = new Model();
        model.person = new Person();
        model.person.firstName = "John";
        model.person.lastName = "Machen";
        model.person.address = "New York";
        model.person.pets = new ArrayList<Pet>();
        Pet pet1 = new Pet();
        pet1.type = "Hund";
        pet1.name = "Lustig";
        model.person.pets.add(pet1);
        Pet pet2 = new Pet();
        pet2.type = "Katze";
        pet2.name = "Grizabella";
        model.person.pets.add(pet2);
        Pet pet3 = new Pet();
        pet3.type = "Fisch";
        pet3.name = "Nimo";
        model.person.pets.add(pet3);

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(model);
        System.out.println(json);
    }
}

Wenn dies ausgeführt wurde, konnte JSON wie folgt aus der Modellklasse ausgegeben werden.

Ausführungsergebnis


{"person":{"firstName":"John","lastName":"Machen","address":"New York","pets":[{"type":"Hund","name":"Lustig"},{"type":"Katze","name":"Grizabella"},{"type":"Fisch","name":"Nimo"}]}}

(5) Formatieren (Pretty Printing) und Ausgeben von JSON mit Jackson

Wenn Sie dies tun, wird der JSON sauber eingerückt und formatiert

ObjectMapper mapper2 = new ObjectMapper();
String prettyJson = mapper2.writerWithDefaultPrettyPrinter().writeValueAsString(model);
System.out.println(prettyJson);

Ausführungsergebnis

{
  "person" : {
    "firstName" : "John",
    "lastName" : "Machen",
    "address" : "New York",
    "pets" : [ {
      "type" : "Hund",
      "name" : "Lustig"
    }, {
      "type" : "Katze",
      "name" : "Grizabella"
    }, {
      "type" : "Fisch",
      "name" : "Nimo"
    } ]
  }
}

Zusammenfassung

  • Ich habe erklärt, wie JSON → Java und Java → JSON einfach mit GSON ausgeführt werden können.

  • Der Quellcode mit GSON lautet hier.

  • Ich habe das auch für Jackson erklärt.

  • Der Quellcode, der Jackson verwendet, lautet hier.

  • Die Methode zum POSTen und Abrufen von JSON über HTTP-Kommunikation ist in [hier] zusammengefasst (https://qiita.com/riversun/items/4e0a1b6bea42ae1405c4).

Recommended Posts