无法使用 Moshi 从返回的 JSON 中解析数组

Unable to Parse Array from Returned JSON using Moshi

我已经开始将 Moshi 与 Retrofit 2 一起使用,并且在解析从服务调用返回的父对象中的对象数组时遇到了 运行 问题。返回的 JSON 如下所示:

{
    "acf": {
        "email": "dirk@dirkgently.com",
        "address": "24 Cortland Avenue",
        "country": "US",
        "description": "Oh my goodness",
        "created_at": "1416672067",
        "updated_at": "1416672067",
        "facebook": "",
        "contact": "Dirk Gently",      
        "photos": [
            {
                "file": 3525
            },
            {
                "file": 3526
            },
            {
                "file": 6110
            },
            {
                "file": 3527
            },
            {
                "file": 3528
            },
            {
                "file": 6700
            },
            {
                "file": 7404
            },
            {
                "file": 7419
            }
        ],

        "latitude": "40.801249",
        "longitude": "-99.746280"
    }
}   

'photos' 字段出现以下异常:

com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was STRING at path $[0].acf.photos

我这样定义模型:

public class Acf {

private String email;
private String address;
List<Photo>photos;

}

public class Photo {
    public int file;
}

我尝试过以各种其他方式在模型中声明 属性,并通读文档以找出我做错了什么。我被困在这一点上,真的可以用另一双眼睛来指引我正确的方向。我有一种感觉,我错过了一些非常简单和明显的东西。在此先感谢任何可以提供帮助的人。如果我遗漏了任何相关信息,请告诉我,我会更新 post。

Update:我发现这个异常只发生在我获取多个ACFs的时候。如果我请求单个对象,一切都会正确解析。

根据错误,您调用的端点可能会为该参数返回不同类型(即,当您期望数组时返回字符串)。尝试将其从 List<> 更改为 Object 并查看调用是否成功。您应该能够对 Object 进行类型检查并从中转换您需要的任何内容。另一种方法是使用自定义类型适配器,但我不确定如何使用 Moshi 来完成它。祝你好运。