使用 gson 和改造反序列化 json

Deserializing json with gson and retrofit

我目前正在尝试反序列化一个 json 对象,该对象包含数百个具有相同结构的对象,如下所示:

“data”: {
    “1” {
        “id” : 1
        “name” : “sample”
        },
        …
    “1000” {
        “id” : 1000
        “name” : “sample”
        }
}

我将如何使用 gson、retrofit 和 rxjava 来做到这一点?我能想到的唯一方法是执行以下似乎不切实际的方法。

public class Data {

    @SerializedName(“1”)
    private Item _1;
    …
    @SerializedName(“1000”)
    private Item _1000;

    Item getItem_1() {
        return _1;
    }

    void setItem_1(Item _1) {
        this._1 = _1;
    }
    …
    Item getItem_1000() {
        return _1000;
    }

    void setItem_1000(Item _1000) {
        this._1000 = _1000;
    }
}

您应该更改 json 格式的结构。使用数组(方括号)而不是 1000 个对象(大括号)。

{
“items”: [
    {
    “id” : 1
    “name” : “sample”
    },
    …
    {
    “id” : 1000
    “name” : “sample”
    }
]
}

那么您的 类 将如下所示:

class Data{
    Item[] items;

    Item getItem(int position){
        return items[position];
    }

}

class Item{
    int id;
    String name;
}

不要为 "data" 创建 class,而是使用 Map<String, Item>。所有 "1" ... "1000" 都将是地图键,您可以使用它们或忽略它们并使用 Map.values().