我有一个带有以下字段的对象,我试图解析它来自web服务:
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”数组。因此,当我尝试使用Gson.fromJson(theString, myclass.class)
将json解析为我的对象时,我得到com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY
异常。我该怎么做才能解析hashmap?
顺便说一句,webservice使用moxy来编组对象。
答案 0 :(得分:1)
您将serviceMetadata
定义为new 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<>();