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

Kotlin Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

您好,我对改装和 api 有疑问。我从中使用了 api : https://api.thecatapi.com/v1/breeds 我添加我的授权密钥

这是我的带有插件 kotlin 数据的模型 class:

data class CatsItem(
    @SerializedName("adaptability")
    val adaptability: Int,
    @SerializedName("affection_level")
    val affectionLevel: Int,
    @SerializedName("alt_names")
    val altNames: String,
    @SerializedName("bidability")
    val bidability: Int,
    @SerializedName("cat_friendly")
    val catFriendly: Int,
    @SerializedName("cfa_url")
    val cfaUrl: String,
    @SerializedName("child_friendly")
    val childFriendly: Int,
    @SerializedName("country_code")
    val countryCode: String,
    @SerializedName("country_codes")
    val countryCodes: String,
    @SerializedName("description")
    val description: String,
    @SerializedName("dog_friendly")
    val dogFriendly: Int,
    @SerializedName("energy_level")
    val energyLevel: Int,
    @SerializedName("experimental")
    val experimental: Int,
    @SerializedName("grooming")
    val grooming: Int,
    @SerializedName("hairless")
    val hairless: Int,
    @SerializedName("health_issues")
    val healthIssues: Int,
    @SerializedName("hypoallergenic")
    val hypoallergenic: Int,
    @SerializedName("id")
    val id: String,
    @SerializedName("indoor")
    val indoor: Int,
    @SerializedName("intelligence")
    val intelligence: Int,
    @SerializedName("lap")
    val lap: Int,
    @SerializedName("life_span")
    val lifeSpan: String,
    @SerializedName("name")
    val name: String,
    @SerializedName("natural")
    val natural: Int,
    @SerializedName("origin")
    val origin: String,
    @SerializedName("rare")
    val rare: Int,
    @SerializedName("rex")
    val rex: Int,
    @SerializedName("shedding_level")
    val sheddingLevel: Int,
    @SerializedName("short_legs")
    val shortLegs: Int,
    @SerializedName("social_needs")
    val socialNeeds: Int,
    @SerializedName("stranger_friendly")
    val strangerFriendly: Int,
    @SerializedName("suppressed_tail")
    val suppressedTail: Int,
    @SerializedName("temperament")
    val temperament: String,
    @SerializedName("vcahospitals_url")
    val vcahospitalsUrl: String,
    @SerializedName("vetstreet_url")
    val vetstreetUrl: String,
    @SerializedName("vocalisation")
    val vocalisation: Int,
    @SerializedName("weight")
    val weight: Weight,
    @SerializedName("wikipedia_url")
    val wikipediaUrl: String
)

这是我的回复:

>  viewModel.myResponse.observe(this, Observer { response ->
            if (response.isSuccessful) {
                Log.d("Response", response.body()?.id.toString())
               massage.text = response.body()?.name.toString()
                

            } else {
                Log.d("Response", response.errorBody().toString())
                errormassage.text = response.code().toString()
            }
        })

我想在 textView 中显示品种名称,但是当我 运行 app:

时出现错误

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 2 列路径 $

BEGIN_ARRAY

我做错了什么?

感谢任何提示和帮助

结果JSON 来自URL 你指示的returns 对象数组。如果整个响应是成功案例中 response.body() 中的内容,那么您的代码无法正确处理该响应。假设返回的结构由单个对象而不是对象数组组成。

也就是说,返回的结果是这样的:

[
    {
        "key1": "value1",
        "key2": 1234
    }
]

但您的代码需要:

{
    "key1": "value1",
    "key2": 1234
}

如果您不确定,为什么不打印出 response.body() 的值以查看其中的内容?

如果是这种情况,修复方法如下所示:

response.body()?.get(0).name.toString()

对数组中的第一项进行操作。 (或者类似的东西。我对 Kotlin 和 Java 做的很少,所以也许那里还有另一个 ? 之类的东西。)