2016-10-23 39 views
0

我有一个JSON对象,我需要从中提取一个浮点值。 的JSON看起来是这样的:Swift:解析JSON时无法将NSCFString转换为NSNumber

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

我的目标是让价格为float。我能够检索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) 

回答

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)) 
} 

注:

  • 既然你已经解开了自选反正可选做安全绑定。
  • 在斯威夫特3的JSON字典[String:Any]
+0

顺便说一句,这是一个价格,因此使用'NSDecimalNumber',而不是'Float'是明智的。 – Sulthan

相关问题