使用带有 Retrofit2 的 GsonConverter 解析嵌套对象
Parse nested object using GsonConverter with Retrofit2
我正在尝试将下一个 JSON 转换为对象:
{
AccountName:"temnoi",
Parts:{
part-0:{
Name:"HOME",
UptimeSeconds:"2143943",
},
part-1:{
Name:"WORK",
UptimeSeconds:"2276958",
}
}
}
The problem is that Parts isn't an array so I don't have any idea how
to obtain them as List or any other data structure.
现在我有这样的DTO class
public class Info {
private String AccountName;
private List<Parts> Parts;
}
但是显然程序崩溃了,因为没有数组。我将 Retrofit2 与 GsonConverter 一起使用。
谁能提出解决这个问题的建议?
不幸的是,由于我没有太多时间,所以我提出了下一个解决方案。
I replace Retrofit2 by OkHTTP and Gson with built-in JSON parser.
收到 OkHttpClient 的响应后,我手动将 JSON 转换为我的对象。
JSONObject root = new JSONObject(responseFromServer);
JSONObject parts = root.getJSONObject("Parts");
Iterator<String> jsonPartsIterator = parts.keys();
List<Part> partsList = new ArrayList<>();
while (jsonPartsIterator.hasNext()) {
try{
String key = jsonRootIterator.next();
partsList.add(convertPartJsonToObject(computers.getJSONObject(key)));
} catch(Exception e){
// in case if there will be number '0' return empty List
}
}
这里Part convertPartJsonToObject(JSONObject object)是将part-0,part-1...转换成我需要的对象的方法。
我正在尝试将下一个 JSON 转换为对象:
{
AccountName:"temnoi",
Parts:{
part-0:{
Name:"HOME",
UptimeSeconds:"2143943",
},
part-1:{
Name:"WORK",
UptimeSeconds:"2276958",
}
}
}
The problem is that Parts isn't an array so I don't have any idea how to obtain them as List or any other data structure.
现在我有这样的DTO class
public class Info {
private String AccountName;
private List<Parts> Parts;
}
但是显然程序崩溃了,因为没有数组。我将 Retrofit2 与 GsonConverter 一起使用。
谁能提出解决这个问题的建议?
不幸的是,由于我没有太多时间,所以我提出了下一个解决方案。
I replace Retrofit2 by OkHTTP and Gson with built-in JSON parser.
收到 OkHttpClient 的响应后,我手动将 JSON 转换为我的对象。
JSONObject root = new JSONObject(responseFromServer);
JSONObject parts = root.getJSONObject("Parts");
Iterator<String> jsonPartsIterator = parts.keys();
List<Part> partsList = new ArrayList<>();
while (jsonPartsIterator.hasNext()) {
try{
String key = jsonRootIterator.next();
partsList.add(convertPartJsonToObject(computers.getJSONObject(key)));
} catch(Exception e){
// in case if there will be number '0' return empty List
}
}
这里Part convertPartJsonToObject(JSONObject object)是将part-0,part-1...转换成我需要的对象的方法。