Swift:解析JSON时无法将NSCFString强制转换为NSNumber

时间:2016-10-23 14:27:41

标签: json swift parsing swift3

我有一个JSON对象,我需要从中提取浮点值。 JSON看起来像这样:

{"ticker":{"base":"NLG","target":"USD","price":"0.05896390","volume":"","change":"-0.00044477"},"timestamp":1477232372,"success":true,"error":""}

我的目标是让价格成为浮动价格。我可以检索json并在没有转换为它打印的浮点数时记录它:可选(0.05896390)。

当我把它作为一个花车时,我得到警告:

  

无法将NSCFString类型的值转换为NSNumber

 let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String: AnyObject]
 let tick = json["ticker"]!["price"]! as! Float
 print(tick)

1 个答案:

答案 0 :(得分:7)

price显然是一个字符串。在JSON对象中,双引号之间的所有内容都是字符串,即使它看起来像是一个数字。

if let tick = json["ticker"] as? [String:Any], let price = tick["price"] as? String {
    print(Float(tick))
}

由于所有值均为String,您甚至可以将字典转换为更具体的[String:String]

if let tick = json["ticker"] as? [String:String], let price = tick["price"] {
    print(Float(tick))
}

注意:

  • 由于您必须打开选项,无论如何都要使用可选绑定安全地执行此操作。
  • 在Swift 3中,JSON字典为[String:Any]