首页 > 解决方案 > 预期 BEGIN_OBJECT 但在 Kotlin 中使用 Gson 是 BEGIN_ARRAY”

问题描述

我正在尝试从 api 检索数据。JSON 响应如下所示


{
    "result":"success",
    "documentation":"https://www.exchangerate-api.com/docs",
    "terms_of_use":"https://www.exchangerate-api.com/terms"
    "supported_codes":[
        ["AED","UAE Dirham"],
        ["AFN","Afghan Afghani"],
        ["ALL","Albanian Lek"],
        ["AMD","Armenian Dram"],
        ["ANG","Netherlands Antillian Guilder"],
        ["AOA","Angolan Kwanza"],
        ["ARS","Argentine Peso"],
        ["AUD","Australian Dollar"],
        ["AWG","Aruban Florin"],
        ["AZN","Azerbaijani Manat"],
        ["BAM","Bosnia and Herzegovina Convertible Mark"],
        ["BBD","Barbados Dollar"] etc. etc.
    ]
}

这就是我拥有的数据类。

CurrencyResponse.kt


package com.example.currencyconverter.data

import com.squareup.moshi.Json

data class CurrencyResponse(
    @Json(name="supported_codes") var supported_codes: List<Codes>
) {
    data class Codes(
        @Json(name="0") var currency_code: String
    ) {

    }

}

但是我仍然收到标题中提到的错误。任何帮助是极大的赞赏

标签: androidjsonkotlin

解决方案


如果可能的话,我认为 API 响应方案需要稍作修改。我认为supported_codes应该包含对象列表,即

    "supported_codes":[
        {
             "currency_code": "AED",
             "currency_name": "UAE Dirham"
        },
        {
             "currency_code": "AFN",
             "currency_name": "Afghan Afghani"
        },
        ... etc ...
    ]

然后,在您的 kotlin 代码中,您需要将Codes数据类修改为:

data class Codes(
   @Json(name="currency_code") val currencyCode: String,
   @Json(name="currency_name") val currencyName: String,
)

推荐阅读