预期BEGIN_OBJECT但在第1行第2列路径$是BEGIN_ARRAY

Huy*_*Huy 22 android gson

我试图读取并解析一个以数组(例如[{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.

  • Kotlin 等效 `code` val gsonBuilder = GsonBuilder() val gson = gsonBuilder.create() val testCase: Array&lt;ErrorResponseLeadListSub&gt; = gson.fromJson( errorString, Array&lt;ErrorResponseLeadListSub&gt;::class.java )`code` (2认同)