如何使用自定义对象的空列表反序列化Gson
问题描述:
最近,我在Gson反序列化中遇到了一个问题。这是我的目标:如何使用自定义对象的空列表反序列化Gson
class Foo{
public List<Donation> donations;
class Donation{
// SerializedName here.
}
}
这是我的JSON:
{
"donations": [] // sometimes, this array is empty.
}
// this is none empty one.
{
"donations": [
{
"doner_id": 4,
"name": "abc",
"donate": "103"
}
]
}
当解析此JSON与上述目标,我总是得到错误:Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray
。如果上面的donations
不为空,则一切正常。我该如何解决它?
答
在这里,我编译了你的json,它适用于空的和非空的捐款,检查它是否在寻找什么。
String json = "{\n" +
"\"donations\": [\n" +
" {\n" +
" \"doner_id\": 4,\n" +
" \"name\": \"abc\",\n" +
" \"donate\": \"103\"\n" +
" }\n" +
" ]\n" +
"}";
JsonParser jsonParser = new JsonParser();
JsonObject object = jsonParser.parse(json).getAsJsonObject();
Gson gson = new Gson();
SampleModel sampleModels1 = gson.fromJson(object, SampleModel.class);
assertNotNull(sampleModels1);
SampleModel.java
public class SampleModel {
@SerializedName("donations")
@Expose
private List<Donations> mDonationsList;
public List<Donations> getDonationsList() {
return mDonationsList;
}
public void setDonationsList(final List<Donations> donationsList) {
mDonationsList = donationsList;
}
public class Donations {
@SerializedName("doner_id")
@Expose
private String doner_id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("donate")
@Expose
private String donate;
public String getDoner_id() {
return doner_id;
}
public void setDoner_id(final String doner_id) {
this.doner_id = doner_id;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getDonate() {
return donate;
}
public void setDonate(final String donate) {
this.donate = donate;
}
}
}
答
检查了这一点,如果它是JSON数组:
import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;
...
Type listType = new TypeToken<ArrayList<YourClass>>(){}.getType();
List<YourClass> yourClassList = new Gson().fromJson(jsonArray, listType);
您可以发布与数据 –
@vikaskumar我JSON捐款添加。 –
只是检查条件,如果捐款清单大小或长度是> 0然后应用您的代码,否则什么都不做。 –