2017-09-28 3 views
1

J'ai un objet avec les champs suivants, que je suis en train d'analyser, provenant d'un webservice:Parsing ce hashmap bizarre imbriqué avec Gson

private String serviceGroup; 
private String serviceDefinition; 
private List<String> interfaces = new ArrayList<>(); 
private Map<String, String> serviceMetadata = new HashMap<>(); 

Pour une raison quelconque, le JSON a cet objet avec un format comme ceci:

"service": { 
"interfaces": [ 
    "json" 
    ], 
    "serviceDefinition": "IndoorTemperature", 
    "serviceGroup": "Temperature", 
    "serviceMetadata": { 
    "entry": [ 
     { 
     "key": "security", 
     "value": "token" 
     }, 
     { 
     "key": "unit", 
     "value": "celsius" 
     } 
    ] 
    } 
} 

la partie supplémentaire, inutile est ici ce tableau « d'entrée » au serviceMetadata hashmap. Donc quand j'essaye d'analyser le json dans mon objet avec Gson.fromJson(theString, myclass.class), j'obtiens une exception com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY. Que pourrais-je faire pour analyser le hashmap? Par ailleurs, le webservice utilise moxy pour marsarchiser les objets.

Répondre

1

Vous avez défini serviceMetadata comme new HashMap<String, String>()

Mais il devrait être Carte des listes d'objets

Votre clé est entry et la liste est la suivante:

  [{ 
       "key": "security", 
       "value": "token" 
      }, { 
       "key": "unit", 
       "value": "celsius" 
      }] 

Donc, la solution est - créer une classe Entry :

public class Entry{ 
    private String key; 
    private String value; 
} 

Et maintenant:

private Map<String, List<Entry>> serviceMetadata = new HashMap<>(); 
+0

@anomeric Carte de clé/valeur où la valeur est Liste des objets –

+0

grâce, il a travaillé. Je peux accepter la réponse dans 9 minutes. –