解析这个奇怪的嵌套的HashMap与GSON

问题描述:

我有以下字段,其中我试图解析的对象,从一个Web服务来:解析这个奇怪的嵌套的HashMap与GSON

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

出于某种原因,JSON有与此对象这样的格式:

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

这里额外的,不需要的部分是serviceMetadata Hashmap中的“entry”数组。所以当我试图解析json到我的对象Gson.fromJson(theString, myclass.class),我得到了一个com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY例外。我能做些什么来解析散列表?

顺便说一下,web服务使用moxy来编组对象。

您定义serviceMetadatanew HashMap<String, String>()

但应对象

你的关键是entry名单的地图和列表是:

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

因此,解决办法是 - 创建一些类Entry

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

现在:

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

@anomeric地图的键/值,其中值对象 –

+0

感谢名单,它的工作。我可以在9分钟内接受答案。 –