Kotlin:需要一个字符串,但在第1行第2列路径$

时间:2018-12-20 11:53:03

标签: android json kotlin gson retrofit2

我在Retrofit2中遇到JSON问题。我的JSON中有一个String作为第一个参数,而不是一个对象。

在Java中,一个Java对象可以读取这种JSON,但是我没有找到Kotlin的解决方案。

@GET("currency")
fun getCurrentCurrency(
    @Query("base") base: String,
    @Query("target") target: String
): Deferred<Currency>

Json:

{
"base": "USD",
"last_update": "2018-12-10T15:10:58.253Z",
"rates": {
    "EUR": 0.8769574627,
    "GBP": 0.7914459201
    },
"status": 200,
"target": "EUR,GBP"
}

data class Currency(
  var base: String,
  @SerializedName("last_update")
  var lastUpdate: String,
  var rates: Rates,
  var status: Int,
  var target: String)

您可以在JSON中看到我没有Currency对象。第一个参数是字符串。如何在Kotlin中阅读此书?

2 个答案:

答案 0 :(得分:0)

尝试使用此版本:

data class Currency(
    @SerializedName("base")
    val base: String,
    @SerializedName("last_update")
    val lastUpdate: String,
    @SerializedName("rates")
    val rates: Rates,
    @SerializedName("status")
    val status: Int,
    @SerializedName("target")
    val target: String
)

data class Rates(
    @SerializedName("EUR")
    val eUR: Double,
    @SerializedName("GBP")
    val gBP: Double
)

答案 1 :(得分:0)

这是我的错误的答案:

val builder = GsonBuilder().setLenient().create()  //This line of the code is a key
        return Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl("https://api.currencystack.io/")
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .addConverterFactory(GsonConverterFactory.create(builder))
            .build()
            .create(CurrencyApi::class.java)