1

我已经开始将 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"
    }
}   

我在“照片”字段中遇到以下异常:

com.squareup.moshi.JsonDataException:应为 BEGIN_ARRAY,但在路径 $[0].acf.photos 处为 STRING

我已经定义了这样的模型:

public class Acf {

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

}

public class Photo {
    public int file;
}

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

更新:我发现此异常仅在我获取多个 ACF 时发生。如果我请求单个对象,一切都会正确解析。

4

1 回答 1

0

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

于 2017-07-20T01:19:47.193 回答