使用 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()
.
我目前正在尝试反序列化一个 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()
.