Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson

Aperçu

--Translate entre l'énumération Java Enum et les valeurs dans JSON --Utilisez les classes abstraites JsonSerializer et JsonDeserializer fournies par Jackson

Environnement de vérification de fonctionnement

Exemple de code

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 pour la notation du genre humain)Un type d'énumération qui représente.
 *Code de genre:inconnue=0,Masculin=1,Femme=2,N'est pas applicable=9
 */
public enum HumanSex {

  /**
   *inconnue=0,Masculin=1,Femme=2,N'est pas applicable=9
   */
  NOT_KNOWN(0), MALE(1), FEMALE(2), NOT_APPLICABLE(9);

  private final int code;

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

  /**
   *Renvoie le code de genre.
   */
  public int getCode() {
    return code;
  }

  /**
   *Renvoie une constante d'énumération HumanSex qui correspond au code de genre.
   *
   * @code de paramètre Code de genre
   * @retourne la constante d'énumération HumanSex
   */
  public static HumanSex codeOf(int code) {
    for (HumanSex value : HumanSex.values()) {
      if (code == value.getCode()) {
        return value;
      }
    }
    return null; //Ne correspond pas
  }

  /**
   *Une classe qui sérialise un objet HumanSex en JSON.
   */
  public static class Serializer extends JsonSerializer<HumanSex> {

    /**
     *Code de genre pour l'objet HumanSex lors de la génération de JSON(Valeur entière)Convertir en.
     */
    @Override
    public void serialize(HumanSex value, JsonGenerator generator, SerializerProvider serializers) throws IOException {
      generator.writeNumber(value.getCode());
    }
  }

  /**
   *Une classe qui désérialise un objet HumanSex de JSON.
   */
  public static class Deserializer extends JsonDeserializer<HumanSex> {

    /**
     *Code de genre lors de l'analyse de JSON(Valeur entière)Vers un objet HumanSex.
     */
    @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;

    //Spécifiez la classe à utiliser lors de la génération / analyse JSON par Jackson avec une annotation
    @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 {

    //Générer un objet de données
    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));

    //Générer une chaîne JSON à partir d'un objet de données dans Jackson
    StringWriter out = new StringWriter();
    new ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(out, inputData);
    String json = out.toString();

    //Chaîne JSON de sortie
    System.out.println("***** Mydata → JSON *****");
    System.out.println(json);

    //Analyser la chaîne JSON dans Jackson et la convertir en objet de données
    MyData outputData = new ObjectMapper().readValue(json, MyData.class);

    //Représentation sous forme de chaîne de sortie de l'objet
    System.out.println("***** JSON → Mydata *****");
    System.out.println(outputData);
  }
}

Fichier de configuration Gradle

Préparez un fichier de configuration build.gradle pour la construction et l'exécution avec Gradle.

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'
}

Résultat d'exécution

***** 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]

Matériel de référence

Recommended Posts

Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Convertir l'énumération Java et JSON vers et depuis Jackson
Code pour échapper aux chaînes JSON en Java
Exemple de code pour convertir List en List <String> dans Java Stream
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Comment utiliser le type d'énumération Java (Enum) dans Mapper XML de MyBatis
Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Nouvelles fonctionnalités de Java 9 et exemple de code
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Exemple de code pour appeler l'API Yahoo! Local Search en Java
Exemple pour décompresser le fichier gz en Java
De Java à C et de C à Java dans Android Studio
Comment assembler JSON directement dans Jackson
Discrimination d'énum dans Java 7 et supérieur
JSON en Java et Jackson Part ③ Incorporer JSON dans HTML et l'utiliser à partir de JavaScript
Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2
[Java] Affiche le résultat de ffprobe -show_streams dans JSON et mappe-le à un objet dans Jackson
Exemple de code Java 02
Exemple de code Java 03
[Java] Convertit le code DB en valeur de code à l'aide d'énum
JSON avec Java et Jackson Part 2 XSS mesures
Exemple de code Java 04
Jackson ne peut pas sérialiser JSON hibernateLazyInitializer dans Spring Data JPA entraîne une erreur
Exemple de code Java 01
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Comment sérialiser et désérialiser le type LocalDateTime avec GSON
Classes et instances Java comprises dans la figure
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Soustraire les constantes Enum des chaînes et des valeurs en Java
Lire JSON en Java
POST JSON en Java
Créer JSON en Java
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
[Java] Changez la langue et les paramètres régionaux en anglais avec les options JVM
Exemple de source Java pour SELECT et afficher CLOB (Oracle Database + java)
Comment définir le code de caractère et le code de saut de ligne dans Eclipse
[jackson] Je souhaite recevoir les valeurs JSON "0" et "1" sous forme de booléen
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment appeler et utiliser l'API en Java (Spring Boot)
[Java] [jackson] Correspond à la virgule de fin (virgule de fin) lors de l'analyse de JSON.
Créez une API pour envoyer et recevoir des données Json avec Spring
Éléments à prendre en compte lors de l'écriture de code en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Raisons d'utiliser séparément Servlet et JSP dans le développement Java
Définir des méthodes abstraites dans l'énumération Java et écrire leur comportement
Comment développer et enregistrer une application Sota en Java
Différences dans la gestion des chaînes entre Java et Perl
Une évolution de l'énumération et des instructions switch! ?? Essayez d'obtenir des types de données algébriques et des correspondances de modèles en Java
[Java] Communication JSON avec jackson
Exemple de code de signature électronique (JAVA)
Collection d'exemples de code parallèle Java
Reportez-vous à enum dans Thymeleaf
Modèle de stratégie Enum en Java