2017-09-28 1 views
1

ich ein Objekt mit den folgenden Feldern, die ich zu analysieren, ich versucht, aus einem Webservice kommen:diese seltsame verschachtelte hashmap mit Gson Parsing

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

Aus irgendeinem Grund hat das json diese Aufgabe mit einem Format wie folgt aus:

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

die zusätzliche, nicht benötigte Teil ist hier, dass "Eintrag" Array am serviceMetadata HashMap. Also, wenn ich versuche, die JSON in mein Objekt mit Gson.fromJson(theString, myclass.class) zu analysieren, bekomme ich eine com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY Ausnahme. Was könnte ich tun, um die Hashmaps zu parsen?

Übrigens verwendet der Webservice Moxy, um die Objekte zu marshalieren.

Antwort

1

definiert Sie serviceMetadata als new HashMap<String, String>()

Aber es sollte Karte von Listen von Objekten sein

Ihr Schlüssel ist entry und Liste ist:

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

So ist die Lösung ist - schaffen eine Klasse Entry :

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

Und jetzt:

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

@anomeric Karte von Schlüssel/Wert in dem Wert Liste der Objekte –

+0

Dank, es hat funktioniert. Ich kann die Antwort in 9 Minuten akzeptieren. –