Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson

Überblick

--Übersetzen Sie zwischen Java Enum-Aufzählung und Werten in JSON --Verwenden Sie die von Jackson bereitgestellten abstrakten Klassen JsonSerializer und JsonDeserializer

Betriebsüberprüfungsumgebung

Beispielcode

package com.example.humansex;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * ISO 5218 (Code für die Notation des menschlichen Geschlechts)Ein Aufzählungstyp, der darstellt.
 *Geschlechtscode:Unbekannt=0,männlich=1,Weiblich=2,Unzutreffend=9
 */
public enum HumanSex {

  /**
   *Unbekannt=0,männlich=1,Weiblich=2,Unzutreffend=9
   */
  NOT_KNOWN(0), MALE(1), FEMALE(2), NOT_APPLICABLE(9);

  private final int code;

  private HumanSex(int code) {
    this.code = code;
  }

  /**
   *Gibt den Geschlechtscode zurück.
   */
  public int getCode() {
    return code;
  }

  /**
   *Gibt eine HumanSex-Aufzählungskonstante zurück, die dem Geschlechtscode entspricht.
   *
   * @Parametercode Geschlechtscode
   * @Rückgabe der HumanSex-Aufzählungskonstante
   */
  public static HumanSex codeOf(int code) {
    for (HumanSex value : HumanSex.values()) {
      if (code == value.getCode()) {
        return value;
      }
    }
    return null; //Stimmt nicht überein
  }

  /**
   *Eine Klasse, die ein HumanSex-Objekt in JSON serialisiert.
   */
  public static class Serializer extends JsonSerializer<HumanSex> {

    /**
     *Geschlechtscode für das HumanSex-Objekt beim Generieren von JSON(Integer Wert)Konvertieren zu.
     */
    @Override
    public void serialize(HumanSex value, JsonGenerator generator, SerializerProvider serializers) throws IOException {
      generator.writeNumber(value.getCode());
    }
  }

  /**
   *Eine Klasse, die ein HumanSex-Objekt von JSON deserialisiert.
   */
  public static class Deserializer extends JsonDeserializer<HumanSex> {

    /**
     *Geschlechtscode beim Parsen von JSON(Integer Wert)Zu einem HumanSex-Objekt.
     */
    @Override
    public HumanSex deserialize(JsonParser parser, DeserializationContext context) throws IOException {
      return HumanSex.codeOf(parser.getIntValue());
    }
  }
}
package com.example;

import com.example.humansex.HumanSex;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.util.ArrayList;
import java.util.List;

public class MyData {

  public List<Person> personList = new ArrayList<>();

  @Override
  public String toString() {
    StringBuilder buf = new StringBuilder();
    for (Person person : personList) {
      buf.append(person + System.lineSeparator());
    }
    return buf.toString();
  }

  public static class Person {

    public String name;

    //Geben Sie die Klasse an, die beim Generieren und Analysieren von JSON von Jackson mit einer Anmerkung verwendet werden soll
    @JsonSerialize(using = HumanSex.Serializer.class)
    @JsonDeserialize(using = HumanSex.Deserializer.class)
    public HumanSex sex;

    public Person() {
    }

    public Person(String name, HumanSex sex) {
      this.name = name;
      this.sex = sex;
    }

    @Override
    public String toString() {
      return "name=[" + name + "], sex=[" + sex.toString() + "]";
    }
  }
}
package com.example;

import com.example.humansex.HumanSex;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.io.StringWriter;

public class App {

  public static void main(String[] args) throws IOException {

    //Datenobjekt generieren
    MyData inputData = new MyData();
    inputData.personList.add(new MyData.Person("Peko",   HumanSex.NOT_KNOWN));
    inputData.personList.add(new MyData.Person("Anubis", HumanSex.MALE));
    inputData.personList.add(new MyData.Person("Isis",   HumanSex.FEMALE));
    inputData.personList.add(new MyData.Person("Robot",  HumanSex.NOT_APPLICABLE));

    //Generieren Sie eine JSON-Zeichenfolge aus einem Datenobjekt in Jackson
    StringWriter out = new StringWriter();
    new ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(out, inputData);
    String json = out.toString();

    //JSON-Zeichenfolge ausgeben
    System.out.println("***** Mydata → JSON *****");
    System.out.println(json);

    //Analysieren Sie die JSON-Zeichenfolge in Jackson und konvertieren Sie sie in ein Datenobjekt
    MyData outputData = new ObjectMapper().readValue(json, MyData.class);

    //Zeichenfolgendarstellung des Objekts ausgeben
    System.out.println("***** JSON → Mydata *****");
    System.out.println(outputData);
  }
}

Gradle-Konfigurationsdatei

Bereiten Sie eine Konfigurationsdatei build.gradle für das Erstellen und Ausführen mit Gradle vor.

build.gradle 
plugins {
  id 'java'
  id 'application'
}

group 'org.example'
version '0.0.1'

sourceCompatibility = 11

repositories {
  mavenCentral()
}

dependencies {
  implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.3'
}

application {
  mainClassName = 'com.example.App'
}

Ausführungsergebnis

***** Mydata → JSON *****
{
  "personList" : [ {
    "name" : "Peko",
    "sex" : 0
  }, {
    "name" : "Anubis",
    "sex" : 1
  }, {
    "name" : "Isis",
    "sex" : 2
  }, {
    "name" : "Robot",
    "sex" : 9
  } ]
}
***** JSON → Mydata *****
name=[Peko], sex=[NOT_KNOWN]
name=[Anubis], sex=[MALE]
name=[Isis], sex=[FEMALE]
name=[Robot], sex=[NOT_APPLICABLE]

Referenzmaterial

Recommended Posts

Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Beispielcode zum Konvertieren von List in List <String> in Java Stream
[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Verwendung des Java-Aufzählungstyps (Enum) in Mapper XML von MyBatis
Java-Codebeispiel zum Erfassen und Anzeigen von DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK
Java 9 neue Funktionen und Beispielcode
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Beispiel zum Entpacken einer gz-Datei in Java
Von Java nach C und von C nach Java in Android Studio
So montieren Sie JSON direkt in Jackson
Diskriminierung von Enum in Java 7 und höher
JSON in Java und Jackson Teil ③ Betten Sie JSON in HTML ein und verwenden Sie es aus JavaScript
Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
[Java] Geben Sie das Ergebnis von ffprobe -show_streams in JSON aus und ordnen Sie es einem Objekt in Jackson zu
Java-Beispielcode 02
Java-Beispielcode 03
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Java-Beispielcode 04
Jackson kann hibernateLazyInitializer in Spring Data nicht JSON serialisieren JPA führt zu einem Fehler
Java-Beispielcode 01
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
So serialisieren und deserialisieren Sie den LocalDateTime-Typ mit GSON
In der Abbildung verstandene Java-Klassen und -Instanzen
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
Lesen Sie JSON in Java
POST JSON in Java
Erstellen Sie JSON in Java
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
[Java] Ändern Sie Sprache und Gebietsschema mit JVM-Optionen in Englisch
Java-Quellbeispiel für SELECT und Anzeige von CLOB (Oracle Database + Java)
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
[jackson] Ich möchte die JSON-Werte "0" und "1" als Booleschen Wert erhalten
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
[Java] [jackson] Entspricht dem nachfolgenden Komma (nachgestellten Komma) beim Parsen von JSON.
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Gründe, Servlet und JSP in der Java-Entwicklung getrennt zu verwenden
Definieren Sie abstrakte Methoden in Java enum und schreiben Sie deren Verhalten
So entwickeln und registrieren Sie eine Sota-App in Java
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
Eine Weiterentwicklung von Aufzählungs- und Schalteranweisungen! ?? Versuchen Sie, in Java algebraische Datentypen und Mustervergleiche zu erzielen
[Java] JSON-Kommunikation mit Jackson
Beispielcode für elektronische Signatur (JAVA)
Java Parallel Code Sample Collection
Siehe Aufzählung in Thymeleaf
Enum Strategiemuster in Java