2016-10-23 7 views
0

nicht konvertieren Ich habe ein JSON-Objekt, ich muss einen Float-Wert daraus extrahieren. Die JSON sieht wie folgt aus:Swift: konnte NSCFString NSNumber beim Analysieren von JSON

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

Mein Ziel ist es, den Preis als Schwimmer zu bekommen. Ich bin in der Lage, den JSON abzurufen und es zu protokollieren, wenn es nicht in einen Float gecastet wird, der gedruckt wird: Optional (0.05896390).

Wenn ich es als Schwimmer werfen erhalte ich die Warnung:

konnte nicht werfen Wert vom Typ NSCFString zu NSNumber

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

Antwort

7

price ist eindeutig ein String. In einem JSON-Objekt ist alles zwischen doppelten Anführungszeichen eine Zeichenfolge, auch wenn es sich um eine Zahl handelt.

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

Da alle Werte String sind, können Sie auch das Wörterbuch zu gieße spezifischere [String:String]

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

Hinweise:

  • Da Sie die optionals es auspacken müssen sowieso tun sicher mit optionalem Bindungen.
  • In Swift 3 der JSON-Wörterbuch ist [String:Any]
+0

By the way, es ist ein Preis ist, also mit 'NSDecimalNumber' statt' Float' ratsam ist. – Sulthan

Verwandte Themen