尝试从 Swift 2.0 中的 json 解析数据时出错?
Posted
技术标签:
【中文标题】尝试从 Swift 2.0 中的 json 解析数据时出错?【英文标题】:Getting an error when trying to parse data from a json in Swift 2.0? 【发布时间】:2016-02-28 22:34:50 【问题描述】:我在尝试从 json 解析数据时遇到问题。
这是我遇到的错误
无法将“__NSArrayI”(0x10e7eb8b0)类型的值转换为“NSDictionary”(0x10e7ebd60)
let jsonResult: AnyObject?
do
jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: [])
print(jsonResult, terminator: "");
let channel: NSDictionary! = jsonResult!.valueForKey("CATEGORY_NAME") as! NSDictionary;
print(channel, terminator: "");
let result: NSNumber! = channel.valueForKey("EVENT_NAME") as! NSNumber;
print(result, terminator: "");
if (result == 0)
let alertController = UIAlertController(title: "", message: "There is no live stream right now", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
catch
// TODO: handle
task.resume()
我遇到错误的那一行是
让频道:NSDictionary! = jsonResult!.valueForKey("CATEGORY_NAME") 作为! NSDictionary;
【问题讨论】:
显然您的 JSON 包含一个数组,而不是CATEGORY_NAME
键的字典。
【参考方案1】:
我同意上面的评论,即您试图强制使用错误的类型(这是应避免使用 !
的原因),但在不知道数据结构的情况下很难为您提供工作代码。
JSON 通常以***数组或***字典的形式出现。您可以使用NSDictionary
和NSArray
,甚至可以使用普通的Swift 字典和数组。下面的代码将解析***字典或数组。您可以将 NSJSONSerialization 调用的结果传递给它。
func parse (jsonResult: AnyObject?)
// If our payload is a dictionary
if let dictionary = jsonResult as? NSDictionary
// Tried to figure out the keys from your question
if let channel = dictionary["CATEGORY_NAME"] as? NSDictionary
print("Channel is \(channel)")
if let eventName = channel["EVENT_NAME"] as? NSNumber
print ("Event name is \(eventName)")
// Same parsing with native Swift Dictionary, assuming the dictionary keys are Strings
if let channel = dictionary["CATEGORY_NAME"] as? [String: AnyObject]
print("Channel is \(channel)")
if let eventName = channel["EVENT_NAME"] as? NSNumber
print ("Event name is \(eventName)")
// Or perhaps our payload is an array?
else
if let array = jsonResult as? NSArray
for element in array
print(element)
// Again, same parsing with native Swift Array
if let array = jsonResult as? [AnyObject]
for element in array
print(element)
parse (["CATEGORY_NAME":["EVENT_NAME" : 22]])
parse (["FOO", "BAR", ["EVENT_NAME" : 22]])
【讨论】:
以上是关于尝试从 Swift 2.0 中的 json 解析数据时出错?的主要内容,如果未能解决你的问题,请参考以下文章
使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值
从 Guidebox API 在 Swift 中解析 JSON 数据