2015-11-03 24 views
3

我从web服务获取国家列表。接受它后,我用这个代码来处理它:Swift 2解析Json作为数组的可选

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 
    // triggering callback function that should be processed in the call 
    // doing logic 
} else { 
    if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? AnyObject { 
     completion(json) 
    } else { 
     let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)       
     print("Error could not parse JSON string: \(jsonStr)") 
    } 
} 

这表看起来是后(它在这部分NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? AnyObject结束):

Optional((
      { 
      "country_code" = AF; 
      "dial_code" = 93; 
      id = 1; 
      name = Afghanistan; 
     }, 
      { 
      "country_code" = DZ; 
      "dial_code" = 213; 
      id = 3; 
      name = Algeria; 
     }, 
      { 
      "country_code" = AD; 
      "dial_code" = 376; 
      id = 4; 
      name = Andorra; 
     } 
)) 

我现在这个JSON对象转换为数组(或某种程度上NSDictionary)并循环它。有人可以建议如何?

回答

3

目前你可以通过你的对象不是循环,因为它已经被你的代码铸成AnyObject。使用您当前的代码,您可以投射JSON数据as? NSDictionaryas? AnyObject

但由于JSON总是与字典或数组开始,你应该这样做,而不是(保持你的例子):

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 
    // process "json" as a dictionary 
} else if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? NSArray { 
    // process "json" as an array 
} else { 
    let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)       
    print("Error could not parse JSON string: \(jsonStr)") 
} 

理想情况下,你会使用,而不是基金会的NSDictionary和NSArray的斯威夫特字典和数组,但这取决于你。

+0

我会测试它,并接受这个答案,如果它的工作!谢谢! – bla0009

+1

它像一个魅力,感谢解释! – bla0009

0

试试这个

let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as? [String:AnyObject] 
+0

仍然是一样的,不工作(我已经把它添加到'if'子句) – bla0009