J'ai un objet Json que je souhaite transformer en POJO, le problème est que 1 de ses propriétés est une valeur c qui aura des valeurs différentes que je ne connais pas à l'avance. Disons que je ne connais rien de "$ key"
, ou que je pourrais être des noms de villes du monde entier
{ "data": [{ "id": 1, "name": "theName", "symbol": "theSymbol", "last_updated": "2018-06-02T22:51:28.209Z", "quote": { "$key": { "price": 9283.92, }, "$key": { "price": 1, } } }], "status": { "timestamp": "2018-06-02T22:51:28.209Z", "error_code": 0, "error_message": "", "elapsed": 10, "credit_count": 1 } }
3 Réponses :
Je résoudrais cela différemment. J'en ferais une sorte de "méta-objet", par exemple. comme ceci:
{ .... "unknownType": { "name": "$key", "value1": "9283.92", "value2": "tttt" } }
De cette façon, vous avez éliminé une couche d'informations inconnues! Vous pouvez essayer d'analyser les champs valueN pour tous les différents types de valeurs et lancer / intercepter des exceptions d'analyse, et ainsi trouver le type correct.
HTH
Vous pouvez mapper $ key
à une propriété de type JsonNode
. Il aura un equals / hashCode fonctionnel afin que vous puissiez le comparer, le mettre dans HashMaps, etc. sans avoir besoin de le relier davantage (JsonNode représente directement un (sous) arbre Json.)
Comme "$ key" est inconnu, ma suggestion est de convertir quote
en Map
, de sorte que la valeur de "$ key "peut être ignoré! Voici mon code:
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; import java.util.Map; public class XmlParser { static class Entity { @JsonProperty("id") String id; @JsonProperty("name") String name; @JsonProperty("symbol") String symbol; @JsonProperty("last_updated") String lastUpdated; @JsonProperty("quote") Map<String, Map<String, Integer>> quote; } static class Data { @JsonProperty("data") List<Entity> data; } public static void main(String[] args) throws Exception { final String testJson = "{\"data\":[{\"id\":1,\"name\":\"theName\",\"symbol\":\"theSymbol\",\"last_updated\":\"2018-06-02T22:51:28.209Z\",\"quote\":{\"a\":{\"price\":9283.92},\"b\":{\"price\":1}}}]}"; ObjectMapper mapper = new ObjectMapper(); Data data = mapper.readValue(testJson, Data.class); System.out.println(mapper.writeValueAsString(data)); } }
Pouvez-vous clarifier ce qui est connu et non connu pour la "$ key"?
Vous devrez convertir cette partie en une
Map
ou quelque chose de similaire.