#json #swift #parsing #swift3
#json #swift #синтаксический анализ #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:
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]
Комментарии:
1. Кстати, это цена, поэтому рекомендуется использовать
NSDecimalNumber
вместоFloat
.