我试图读取并解析一个以数组(例如[{test: "test"}])开头的JSON字符串,并继续遇到错误:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
Run Code Online (Sandbox Code Playgroud)
我的日志中的错误指向此行:
Gson gson = new GsonBuilder().create();
PayoutCharges payoutList = gson.fromJson(reader, PayoutCharges.class);
Run Code Online (Sandbox Code Playgroud)
在一些stackoverflow答案之后,我创建了PayoutCharges类作为PayoutCharge的数组列表.如何解决此问题,以便GSON知道JSON字符串在数组中?
PayoutCharges.java
package com.app.driver.entity;
import java.util.ArrayList;
import com.google.gson.annotations.SerializedName;
public class PayoutCharges {
//handle error
@SerializedName("error")
private Error mError;
public Error getError() {
return mError;
}
public void setError(Error error) {
mError = error;
}
//handle data
@SerializedName("payoutCharges")
private ArrayList<PayoutCharge> mPayoutCharges;
public ArrayList<PayoutCharge> getPayoutCharges() {
return mPayoutCharges;
}
public void setPayoutCharges(ArrayList<PayoutCharge> payoutCharges) {
mPayoutCharges = payoutCharges;
}
}
Run Code Online (Sandbox Code Playgroud)
阅读@ Ridcully的回复后,我想问一下我是否有办法更新,PayoutCharges.java以便知道JSON是一个数组.有点像@SerializedName([])?
Dev*_*rim 33
下面的代码适用于您的示例json值:
String val1 = "[{test: \"test\"}]";
final GsonBuilder gsonBuilder = new GsonBuilder();
final Gson gson = gsonBuilder.create();
TestCase[] testCase = gson.fromJson(val1, TestCase[].class);
Run Code Online (Sandbox Code Playgroud)
TestCase持有者类:
private static class TestCase {
@SerializedName("test")
private String field;
}
Run Code Online (Sandbox Code Playgroud)
您共享的测试示例包含一个包含对象的数组.因此,在将json值反序列化为对象(数组)时,必须使用pojo类的数组.
如果这个答案对你没有帮助(这意味着你的真实json值有不同的东西),你应该更好地分享你正在处理的真正的json.
| 归档时间: |
|
| 查看次数: |
49511 次 |
| 最近记录: |