使用Gson解析这个奇怪的嵌套hashmap

时间:2017-09-28 17:14:03

标签: java gson moxy

我有一个带有以下字段的对象,我试图解析它来自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来编组对象。

1 个答案:

答案 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<>();