You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin命令行项目调用CoinbaseAPI遇JSON解析错误求助

解决Coinbase API调用时的JsonDecodingException问题

错误核心原因

你遇到的问题本质是JSON解析模型与API返回结构不匹配,或者在处理用户输入时错误地将字符串类型的货币代码(如USD)强制转换为Double类型,导致解析器尝试把"USD"转成数字失败,抛出JsonDecodingException。

分步解决方案

1. 修正用户输入处理逻辑

检查读取用户输入的代码,确保没有把输入的字符串转成Double:

// 错误写法:会把字符串USD强制转成Double,直接报错
// val currencyCode = readLine()?.toDouble()

// 正确写法:保留字符串类型
val currencyCode = readLine()?.trim() ?: ""

2. 匹配Coinbase API结构定义数据类

Coinbase公开汇率API(如https://api.coinbase.com/v2/exchange-rates?currency=USD)的返回结构如下:

{
  "data": {
    "currency": "USD",
    "rates": {
      "BTC": "0.000023",
      "EUR": "0.92"
    }
  }
}

你需要定义完全匹配的Kotlin数据类,避免把currency这类字符串字段定义成Double:

// 若使用kotlinx.serialization,需添加@Serializable注解
import kotlinx.serialization.Serializable

@Serializable
data class ExchangeRateResponse(
    val data: ExchangeRateData
)

@Serializable
data class ExchangeRateData(
    val currency: String, // 这里必须是String类型,不能是Double
    val rates: Map<String, String> // rates值为字符串,后续可按需转成Double
)

3. 修正JSON解析逻辑

确保解析时使用正确的数据类:

import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

// 假设apiResponseString是接口返回的JSON字符串
val response = Json.decodeFromString<ExchangeRateResponse>(apiResponseString)

// 如需使用汇率数值,再单独转换
val btcRate = response.data.rates["BTC"]?.toDouble()

关键验证点

查看错误堆栈中指向的具体字段,确认是哪个属性被错误定义为Double,将其修改为String类型即可解决问题。

内容的提问来源于stack exchange,提问作者mdaw11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:24:52