Maison  >  Article  >  Définir des POJO avec des clés mutables

Définir des POJO avec des clés mutables

王林
王林avant
2024-02-09 08:42:09482parcourir

L'éditeur PHP Zimo vous expliquera comment utiliser les clés variables pour définir des POJO (anciens objets Java) dans cet article. En programmation, POJO fait référence à un simple objet Java qui ne dépend d'aucun framework ou bibliothèque spécifique. Les clés variables signifient que lors de la définition d'un POJO, les clés (noms de propriété) peuvent être modifiées ou étendues dynamiquement selon les besoins. Cette technologie nous permet d'exploiter les propriétés des objets de manière plus flexible et améliore la lisibilité et la maintenabilité du code. Nous verrons ensuite comment définir des POJO avec des clés variables et donnerons quelques exemples de scénarios d'application pratiques.

Contenu de la question

J'essaie de convertir json en pojo où les clés sont mutables. Par exemple : Berlin, Paris dans l'exemple suivant :

{
  "berlin": {
    "en-us": {
      "displayname": "us",
      "supportedlanguage": [
        "us"
      ],
      "fullexample": "hello us"
    },
    "en-ca": {
      "displayname": "ca",
      "supportedlanguage": [
        "ca"
      ],
      "fullexample": "hello ca"
    }
  },
  "paris": {
    "en-us": {
      "displayname": "us",
      "supportedlanguage": [
        "us"
      ],
      "fullexample": "hello us"
    },
    "en-ca": {
      "displayname": "ca",
      "supportedlanguage": [
        "ca"
      ],
      "fullexample": "hello ca"
    }
  }
}

Pour tout ce qui se trouve dans la clé variable (Berlin, Paris), par exemple :

"en-us": {
      "displayname": "us",
      "supportedlanguage": [
        "us"
      ],
      "fullexample": "hello us"
    },
    "en-ca": {
      "displayname": "ca",
      "supportedlanguage": [
        "ca"
      ],
      "fullexample": "hello ca"
    }

La classe que j'ai définie est la suivante :

class citydata {

map <string, languagedata> locale;
}

class languagedata {
string displayname;
list<string> supportedlanguage;
string fullexample;
}

Enfin pour accueillir les variableskeys, j'ai défini un nouvel objet comme suit :

class city {

map<string, citydata> city;

}

Cependant, j'obtiens l'erreur suivante :

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Berlin" , not marked as ignorable (0 known properties: ])

Comment stocker les clés variables dans pojo ? C'est quelque chose d'essentiel, donc je souhaite le récupérer via la valeur de lecture du Jackson ObjectMapper.

Solution de contournement

Vous devez analyser les données comme map4b77346e33c8acbbb76d82c1dabac30c, et non comme un objet contenant une propriété de carte. Votre niveau racine est la carte.

map<string, citydata> parsed = objectmapper.readvalue(
  input,
  new typereference<map<string, citydata>>() {});

En utilisant votre type city, vous pouvez analyser json en utilisant la structure suivante :

{
  "city": {
    "Berlin": { ... },
    "Paris": { ... }
  }
}

où votre json actuel est imbriqué sous la clé "city" (map4b77346e33c8acbbb76d82c1dabac30c city).

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer