JSON对象内部而不是阵列中的多个JSON对象
问题描述:
我正在使用提供以下响应的API。 (为简单起见,我已将数据内的对象数量减少到2个)。JSON对象内部而不是阵列中的多个JSON对象
{
"Response": "Success",
"Message": "Coin list succesfully returned!",
"BaseImageUrl": "https://www.cryptocompare.com",
"BaseLinkUrl": "https://www.cryptocompare.com",
"Data": {
"42": {
"Id": "4321",
"Url": "/coins/42/overview",
"ImageUrl": "/media/19984/42.png",
"Name": "42",
"CoinName": "42 Coin",
"FullName": "42 Coin (42)",
"Algorithm": "Scrypt",
"ProofType": "PoW",
"FullyPremined": "0",
"TotalCoinSupply": "42",
"PreMinedValue": "N/A",
"TotalCoinsFreeFloat": "N/A",
"SortOrder": "34"
},
"365": {
"Id": "33639",
"Url": "/coins/365/overview",
"ImageUrl": "/media/352070/365.png",
"Name": "365",
"CoinName": "365Coin",
"FullName": "365Coin (365)",
"Algorithm": "X11",
"ProofType": "PoW/PoS",
"FullyPremined": "0",
"TotalCoinSupply": "2300000000",
"PreMinedValue": "N/A",
"TotalCoinsFreeFloat": "N/A",
"SortOrder": "916"
}
},
"Type": 100
}
我想将所有对象放在数据中的数组中,以便我可以将它们传递给我的RecyclerView的适配器。
我利用Retrofit2和RxJava2进行网络操作。
这是我改装制造商此刻的代码:http://www.jsonschema2pojo.org/
我已编辑类数据,以便它包含:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
我使用也产生了POJO类硬币和数据数组硬币而不是单个对象:
public class Data {
@SerializedName("Coin")
@Expose
private Coin[] coins;
public Coin[] getCoin() {
return coins;
}
public void setCoins(Coin[] coins){}
}
我会如何去添加数据中的所有对象到Coin数组? 我是否需要创建自定义转换器,如果是,我该如何实现?
在此先感谢!
答
这是你的数据类:
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.ArrayList;
@JsonAdapter(Data.DataJsonAdapter.class)
public class Data {
private Coin[] coins;
public Coin[] getCoin() {
return coins;
}
public void setCoins(Coin[] coins) {
this.coins = coins;
}
public static class DataJsonAdapter extends TypeAdapter<Data> {
@Override
public void write(JsonWriter out, Data value) throws IOException {
// TODO: Maybe implement
}
@Override
public Data read(JsonReader reader) throws IOException {
ArrayList<Coin> coins = new ArrayList<>();
Gson gson = new Gson();
reader.beginObject();
while (reader.hasNext()) {
reader.nextName(); // Read "42", "365", ...
coins.add(gson.fromJson(reader, Coin.class));
}
reader.endObject();
Data data = new Data();
// Can probably be simplified
Coin[] array = new Coin[coins.size()];
coins.toArray(array); // fill the array
data.setCoins(array);
return data;
}
}
}
然后在某处你的代码,只要致电:
Gson gson = new Gson();
Data data = gson.fromJson(yourJson, Data.class);
我没有,但你应该检查是否有下一个在阅读阅读器时预期的类型,以防止崩溃。
答
public class All_Plan {
@SerializedName("Coin")
private ArrayList<CoinData> data;
@SerializedName("status")
private String status;
public ArrayList<CoinData> getData() {
return data;
}
public void setData(ArrayList<CoinData> data) {
this.data = data;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
这将如何解决获取数组中的所有对象的问题? – DennisN