Retrofit2:预期为 BEGIN_ARRAY,但在第 1 行第 268 列路径 $[0].images 处为 STRING

Posted

技术标签:

【中文标题】Retrofit2:预期为 BEGIN_ARRAY,但在第 1 行第 268 列路径 $[0].images 处为 STRING【英文标题】:Retrofit2:Expected BEGIN_ARRAY but was STRING at line 1 column 268 path $[0].images 【发布时间】:2017-10-28 19:28:15 【问题描述】:

我知道这不是第一次有人问这个问题,但是使用 Retrofit2 我找不到解决问题的正确方法。

我有一个包含字符串列表的对象。当我想将 JSON 响应转换为我的对象时,所有其他字段都可以,但是将字符串列表转换为我的列表时出现此错误:

Retrofit2: Expected BEGIN_ARRAY but was STRING at line 1 column 268 path $[0].images

这是我的 API:

@POST("/cp/api/")// get list of products
    Call<List<Product>> Get_Special_Products(@Body Object request);

我的改造设置:

public Retrofit Store_retrofit(OkHttpClient client) 
        return new Retrofit.Builder()
                .baseUrl(Urls.Sotre_Base_Url)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    

我的对象:

public class Product implements Serializable 
    @SerializedName("id")
    private int id;
    @SerializedName("user_id")
    private int user_id;
    @SerializedName("cat_id")
    private int cat_id;
    @SerializedName("title")
    private String title;
    @SerializedName("description")
    private String description;
    @SerializedName("image")
    private String image;
    @SerializedName("images")
    private List<String> images;
public int getUser_id() 
        return user_id;
    

    public int getCat_id() 
        return cat_id;
    

    public String getTitle() 
        return title;
    

    public String getDescription() 
        return description;
    

    public String getImage() 
        return image;
    
public List<String> getImages() 
        return images;
    

这是导致图像错误的 JSON 的一部分:

images:[
    "1487801544.jpg","1487801544.jpg","1487801544.jpg"
]

【问题讨论】:

我猜你的反应正在改变图像的数量。检查 api 是否在一张图像的情况下返回对象 我认为你应该检查来自你的 api 的响应,这个错误通常是由不正确的响应格式引起的。 @HammadAkram 谢谢,我找到了问题,错误的数据类型来自服务器。 @SepJaPro2.4 谢谢,我找到了问题,错误的数据类型来自服务器。 【参考方案1】:

这主要发生在您的 API 服务无法将数组转换为 json 并且改造将其读取为 String 时。 调用您的 API 服务提供商以解决将数组转换为 json 的问题 :) 例如

"images": "[\"1487801544.jpg\",\"1487801544.jpg\",\"148801544.jpg\"]"

retrofit 上面读为 String 并且应该改变如下:

"images": [
      "1487801544.jpg",
      "1487801544.jpg",
      "1487801544.jpg"
    ]

【讨论】:

@Mohsenmokhtari 你好,亲爱的兄弟。

以上是关于Retrofit2:预期为 BEGIN_ARRAY,但在第 1 行第 268 列路径 $[0].images 处为 STRING的主要内容,如果未能解决你的问题,请参考以下文章

预期 BEGIN_OBJECT 但在路径 $ 处是 BEGIN_ARRAY - 使用 RxJava 处理 JSONArray 响应的 Retrofit2

使用 Retrofit 将 JsonArray 转换为 Kotlin 数据类(预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY)

改造预期的 begin_array 但在第 1 行第 2 列路径 $ Android Studio 处是 begin_object

改造预期为 BEGIN_OBJECT,但为 BEGIN_ARRAY

将 JSON 字符串转换为对象返回“预期的 BEGIN_ARRAY 但为字符串”[重复]

AsyncTask 预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY