没有实体名称的GSON映射

时间:2014-08-27 20:47:47

标签: android json object mapping gson

我需要使用GSON将JSON对象映射到类,这里是JSON对象:

{
    "protocols": [
          [ "https", 39 ],
          [ "http", 1 ]
        ],
     ...
}

通常,如果指定了实体名称,则很容易做到这样的事情:

{
    "protocols": [
          [ "name":"https", "count":39 ],
          [ "name":"http", "count":1 ]
        ],
     ...
}

class ProtocolItem {
     @SerializedName("name")
     String protocolName;

     @SerializedName("count")
     int count;
}

但是,由于在这种情况下没有指定实体名称,我不知道如何为此进行映射。如果您熟悉此案,请为我指点。

由于

1 个答案:

答案 0 :(得分:0)

与第一个例子不同,

[ "name":"https", "count":39 ],

是无效的JSON,因为您可以使用[1, 2]指定不使用任何名称的数组,也可以使用{"x": 1, "y": 2}使用“实体名称”作为键来指定地图。所以解决方案很简单:

{
    "protocols": [
          [ "https", 39 ],
          [ "http", 1 ]
        ],
}

是具有单个键和值的对象,该值是对象数组的数组。您可以将其映射为

class All {
    Object[][] protocols;
}

您必须在此处使用Object,因为它需要接受字符串和整数。您可以使用List s。

代替数组

我想,您更愿意将其序列化为

class All {
    Map<String, Integer> protocols;
}

这也是可能的,但你需要一个TypeAdapter。第一个链接的示例清楚地显示了如何执行此操作(从beginArray开始,在循环测试JsonToken.BEGIN_ARRAY中执行nextStringnextInt等。)