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
相关产品推荐
相关产品推荐

