J'ai json champ s comme ci-dessous. Comment puis-je le désérialiser en String, String Map?java jackson désérialisation avec différents types d'objets imbriqués
s:{
"g":0.0,
"p":0.0,
"m":0.0,
"media":{
"1":{"key":0,"value":0},
"2":{"key":0,"value":0},
"3":{"key":0,"value":0},
"4":{"key":0,"value":0},
...},
"pr":{
"1":{"key":0,"value":0},
"2":{"key":0,"value":0},
"3":{"key":0,"value":0},
...}
}
J'ai essayé comme ça
public JsonNode s;
@JsonGetter("s")
public Map<String,String> getS() {
if (s == null) {
return null;
}
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map;
map = mapper.convertValue(score, new TypeReference<Map<String, Object>>(){});
Map<String,String> result;
for (Map.Entry<String, Object> entry : map.entrySet()) {
if(entry.getValue() instanceof String){
result.put(entry.getKey(), (String) entry.getValue());
}
}
return result;
}
et c'est un travail pour le test, mais je reçois l'erreur suivante pour des données réelles
ne peut désérialiser instance de java.lang.String sur de START_OBJECT jeton à [Source: UNKNOWN; ligne: -1, colonne: -1] (par référence chaîne : java.util.LinkedHashMap [ "media"])
Toute suggestion?
Quelle est la différence avec ma tentative? Je tout d'abord converti en carte et puis à la carte . Comment devrais-je le mettre dans votre proposition? –
Sergei
@Sergei 's' n'est pas un' Map 'en outre il y a 3 niveau d'imbrication pour obtenir la valeur clé dans' media' –
nullpointer
Résolu comme ceci pour (Entrée Map.Entry: map .entrySet()) { result.put (entrée.getKey(), entrée.getValue(). toString()); } –
Sergei