java - 如何使用 AutoValue 解析结构为对象数组的 JSON?

标签 java android gson auto-value

我有这个 JSON 正文:

[
    {
        "id": 0,
        "field1": "10",
        "field2": "22"
    },
    {
        "id": 1,
        "field1": "11",
        "field2": "23"
    }
]

我的pojoItem:

@AutoValue
public abstract class PojoItem{

    @SerializedName("field1")
    public abstract String field1();

    @SerializedName("id")
    public abstract int id();

    @SerializedName("field2")
    public abstract String field2();

}

还有我的pojoItemList:

@AutoValue
public abstract class PojoItemList{

    public abstract List< PojoItem > itemList();

    public static TypeAdapter<PojoItemList> typeAdapter(Gson gson) {
        return new AutoValue_PojoItemList.GsonTypeAdapter(gson);
    }
}

我有AutoValueGsonFactory:

@GsonTypeAdapterFactory
public abstract class AutoValueGsonFactory implements TypeAdapterFactory {

    // Static factory method to access the package
    // private generated implementation
    public static TypeAdapterFactory create() {
        return new AutoValueGson_AutoValueGsonFactory();
    }
}

我正在使用 Retrofit 和 RxJava。我得到了这个异常(exception):

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

如何设置我的 POJO 以将 JSON 作为对象数组而不是集合来读取?

最佳答案

问题是您为您的列表提供了一个名称 itemList,而响应中不存在该名称。

Retrofit 应该像这样工作:

public class Item {

    @SerializedName("field1")
    public String field1;

    @SerializedName("id")
    public int id;

    @SerializedName("field2")
    public String field2;

}

然后,当您定义 Retrofit 的接口(interface)时,使用如下内容:

@GET("/path")
Single<List<Item>> getItems(); 

关于java - 如何使用 AutoValue 解析结构为对象数组的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42240399/

相关文章:

java - 哪种访问 berkeley db 的方法更好

java - 使用 Hibernate、Postgres 和 Guice Provider 时“事务中空闲”

android - onActivityResult() 在意外的时间被调用

android - 在 Android 平板电脑的 map 上绘制叠加层时正确处理主线程连接上的网络

java - 如何读取通用列表中的 JSON

java - 找不到 ARToolkit buildToolsVersion

java - LibGDX - TexturePacker2 不生成/打包图像

android - 如果我需要按钮的小边框半径,为什么我们需要创建形状?

java - 使用 gson 反序列化对象,预期为 BEGIN_ARRAY,但在第 1 行第 2 列处为 BEGIN_OBJECT

json - gson flat json 到嵌套对象需要序列化器/反序列化器吗?