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

Swift从JSON提取tax_amount数值报错,求助正确提取方法

解决JSON提取tax_amount值的问题

你遇到的问题核心是JSON里的tax_amount是数值类型(192是数字),不是字符串类型,所以用as? String强转肯定会失败,返回nil。

正确的提取方式:

直接把它当成数值类型提取,根据实际接口返回情况选择Int或Double:

情况1:tax_amount固定为整数(比如示例里的192)

修改提取逻辑,先转成Int再转成你需要的Double类型:

let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
    guard let data = data,
          let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
          let taxAmount = json["tax_amount"] as? Int, // 直接提取为Int类型
          let self = self else {
              print("Error")
              return
          }
    
    print("json is ", json)
    
    taxAmt = Double(taxAmount) // 转成Double赋值给taxAmt
})

情况2:tax_amount可能带小数(比如192.5)

如果接口可能返回小数,直接提取为Double即可:

let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
    guard let data = data,
          let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
          let taxAmount = json["tax_amount"] as? Double, // 直接提取为Double类型
          let self = self else {
              print("Error")
              return
          }
    
    print("json is ", json)
    
    taxAmt = taxAmount // 直接赋值
})

补充说明:

你原来的代码里还有个编译错误:taxAmountS被注释掉了,但后续代码还在引用它,修改后的逻辑直接在guard语句里完成数值提取,避免了未定义变量的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:12:42