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

使用SwiftyJSON无法将JSON转为Double类型的问题求助

嘿,我来帮你搞定这个问题!

问题根源分析

你遇到的情况其实很常见——Cryptonator API返回的price字段在JSON里是字符串类型,而非原生的数字类型。虽然它看起来是0.47756685这样的小数,但实际返回的JSON结构里,这个值是被双引号包裹的(比如"0.47756685")。这就导致SwiftyJSON用.double去解析时找不到对应的数字类型,直接进入else分支;而用.string能正确读取到这个字符串格式的价格。

两种可行的解决方案

方案一:先取字符串再安全转Double(推荐)

这种方式更稳妥,能避免API返回异常格式时的崩溃,代码示例如下:

func updateCardanoData(json : JSON) {
    // 先获取字符串,再尝试转换成Double
    if let cardanoPriceString = json["ticker","price"].string, 
       let cardanoResult = Double(cardanoPriceString) {
        cardanoPriceLabel.text = String(format: "%.2f", cardanoResult)
        // 这里写你的后续业务逻辑
    } else {
        // 解析失败时的兜底处理,比如显示错误提示
        cardanoPriceLabel.text = "价格获取失败"
    }
}

方案二:用SwiftyJSON的自动转换属性(谨慎使用)

如果你能确保API返回的价格字符串一定是合法数字格式,可以用SwiftyJSON提供的doubleValue属性,它会自动尝试把字符串转成Double:

func updateCardanoData(json : JSON) {
    let cardanoResult = json["ticker","price"].doubleValue
    // 注意:如果API返回的价格是0,这个判断会误判,所以更推荐方案一
    if cardanoResult != 0 {
        cardanoPriceLabel.text = String(format: "%.2f", cardanoResult)
    } else {
        cardanoPriceLabel.text = "价格获取失败"
    }
}
验证API返回结构(可选)

你可以先打印完整的JSON响应,确认字段类型:

print("完整JSON响应:\(json)")

输出的内容会类似这样(重点看price的引号):

{
  "ticker": {
    "base": "ADA",
    "target": "AUD",
    "price": "0.47756685",
    "volume": "12345678.90",
    "change": "+0.01234567"
  },
  "timestamp": 1620000000,
  "success": true,
  "error": ""
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:04