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.
[Dieser Artikel] Ich werde zusammenfassen, wie JSON in Java </ b> behandelt wird
Es gibt zwei Möglichkeiten, JSON in Java (deserialisieren) und Java in JSON (serialisieren) zu konvertieren.
So verwenden Sie GSON für die Bibliothek
Wie man Jackson für die Bibliothek benutzt
Ich werde zwei Möglichkeiten erklären, um eine HTTP-Kommunikation mit Java durchzuführen.
Wie man OkHttp3 benutzt
Verwendung des Java-Standardpakets ** HttpUrlConnection **
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"}
]
}
}
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)
Jackson Leistungsorientierte Bibliothek
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
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'
Gehen Sie zur folgenden Site und fügen Sie den obigen JSON ein http://www.jsonschema2pojo.org/
■ 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.
■ ** 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;
}
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
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"}]}}
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 hat die Serien 1.x und 2.x, verwendet jedoch die Serien 2.x.
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
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'
Gehen Sie zur folgenden Site und fügen Sie den obigen JSON ein http://www.jsonschema2pojo.org/
■ 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.
■ ** 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);
}
}
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);
}
}
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"}]}}
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"
} ]
}
}
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