我尝试读取和解析一个以数组开头的JSON字符串(例如[{test: "test"}]
),但我一直遇到错误:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
我的日志中的错误指向以下行:
Gson gson = new GsonBuilder().create();
PayoutCharges payoutList = gson.fromJson(reader, PayoutCharges.class);
在回答了一些stackoverflow问题之后,我创建了PayoutCharges类作为PayoutCharge的数组列表。如何解决这个问题,以便GSON知道JSON字符串在数组中?
支出费用.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;
}
}
阅读@Ridcully的回复后,我想问一下,是否有办法更新PayoutCharges.java
,让它知道JSON是一个数组,比如@SerializedName([])
?
6条答案
按热度按时间9avjhtql1#
下面的代码适用于示例json值:
TestCase保持器类:
你分享的测试例子有一个数组,这个数组有对象,所以你必须使用pojo类的数组,同时将json值反序列化为一个对象(数组)。
如果这个答案对您没有帮助(这意味着您的真实的json值有一些不同),您最好共享您正在开发的实际json。
vlf7wbxs2#
上面的enter image description here是我需要解析的;这是我的实体:
***jsonTemp是一个字符串,它包含了我在本文开头列出的内容***solution 1:
解决方案2:
谢谢德弗林·唐瑟。
alen0pnh3#
您可以在Retrofit中通过简单更改Api接口来解决此问题。您只需要编辑您的Call〈〉。
之前:
打电话
将此编辑到:
打电话
只需将响应编码成列表,您的问题就会得到解决。
jhiyze9q4#
如果再次将
PayoutCharge
对象的数组定义为类(PayoutCharges
),则JSON应如下所示:efzxgjgh5#
注意gson.fromJson()的第二个参数,它需要一个数组类,例如data[]. class。
cqoc49vn6#
这是因为对象中第二列的名称和类型与解析的数据冲突。如果数据中没有其中一个数据,可以将其写入最后一列。