Maison > Java > javaDidacticiel > le corps du texte

Comment gérer différents noms de propriété pour la sérialisation et la désérialisation JSON dans Jackson ?

Susan Sarandon
Libérer: 2024-10-30 02:19:02
original
940 Les gens l'ont consulté

How to Handle Different Property Names for JSON Serialization and Deserialization in Jackson?

Gestion des différences de noms de propriété pour la sérialisation et la désérialisation JSON

Dans Jackson, il est possible d'avoir des noms différents pour une propriété lors de la sérialisation et de la désérialisation. Prenons un exemple avec la classe Coordonnées suivante :

<code class="java">class Coordinates {
  int red;
}</code>
Copier après la connexion

Nous voulons le format JSON suivant pour la désérialisation :

<code class="json">{
  "red": 12
}</code>
Copier après la connexion

Cependant, pour la sérialisation, nous avons besoin du format suivant :

<code class="json">{
  "r": 12
}</code>
Copier après la connexion

Solution :

La solution réside dans l'utilisation de l'annotation @JsonProperty sur les méthodes getter et setter, en s'assurant qu'elles portent des noms différents :

<code class="java">class Coordinates {
    int red;

    @JsonProperty("r")
    public byte getRed() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
Copier après la connexion

Notez que les noms de méthodes doivent être différents. Jackson les interprète comme des références à différentes propriétés, plutôt que comme la même propriété avec des noms différents.

Notes supplémentaires :

  • Pour les attributs de classe, il est conseillé de utilisez le type de données approprié (octet dans ce cas) pour faire correspondre les valeurs potentielles de la charge utile JSON.
  • L'ObjectMapper utilisé pour la sérialisation et la désérialisation peut être personnalisé si nécessaire pour configurer des paramètres supplémentaires.

Code de test :

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());</code>
Copier après la connexion

Sortie :

Serialization: {"r":5}
Deserialization: 25
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!