【问题标题】:Expected BEGIN_OBJECT but was BEGIN_ARRAY" using Gson in Kotlin预期 BEGIN_OBJECT 但在 Kotlin 中使用 Gson 是 BEGIN_ARRAY”
【发布时间】:2021-12-11 07:42:01
【问题描述】:

我正在尝试从 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
    ) {

    }

}

但我仍然收到标题中提到的错误。非常感谢任何帮助

【问题讨论】:

  • 我对 Gson 不是很熟悉,但是将数组(例如 ["AED","UAE Dirham"])反序列化为 Codes 对象似乎不太对。您可能需要这样的东西:var supported_codes: List&lt;List&lt;String&gt;&gt; 或者使用自定义序列化程序。

标签: android json kotlin


【解决方案1】:

如果可能,我认为 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,
)

【讨论】:

  • 但是事情是这样的,数组条目没有名称,所以我可以写“currency_code”和“currency_name”作为名称吗?
  • 不幸的是,它还需要更改 API 响应架构。但是,在我看来,将对象数组放入 supported_codes 可以帮助客户端轻松识别传递的属性,而不是数组数组
  • 我把它改成了这个`数据类CurrencyResponse(@Json(name="supported_codes")val supportedCodes: List>){}`应用程序不再崩溃但我得到一个空响应
  • 或者,您可以尝试解析supportedCodes,如stackoverflow.com/a/17974337中回答的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2016-09-26
  • 2012-03-24
  • 1970-01-01
相关资源
最近更新 更多