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

Parsing this weird nested hashmap with 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" 数组。因此,当我尝试使用 Gson.fromJson(theString, myclass.class) 将 json 解析为我的对象时,我得到了 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY 异常。我可以做什么来解析哈希图?

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

您将 serviceMetadata 定义为 new HashMap<String, String>()

但应该是Map of lists of objects

您的密钥是 entry,列表是:

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

所以解决方案是 - 创建一些 class Entry:

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

现在:

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