我正在使用NSJSONSerialization在Swift应用程序中解析JSON。然而,返回的字典由于嵌套结构复杂,使得非常长的类型声明(例如 Dictionary<String, Array<Dictionary<String, ....>>
)不切实际。
有没有一种好的方法在Swift中处理这样的结构,其中集合的结构非常复杂,其类型直到运行时才知道?
只需将json数据引用为NSDictionary:
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
然后您可以使用下标引用它:
var myValue: NSString = dict["level1"]["level2"]
myDictionary["accounts"]
可能是一个可选项。尝试使用: myDictionary["accounts"]?["active"]?
在Obj-C中,我们可以这样写:
cityName = myDictionary[@"photos"][@"region"][@"city"]
正如一些人已经发现的那样,上面的方法在Swift中并不适用,至少对我来说从未有效。
以下是如何在Swift中访问NSDictionary中三个索引值的字符串:
let cityName = ((myDictionary!["photos"] as NSDictionary)["region"]! as NSDictionary)["city"]! as String
希望在Swift的下一个更新版本中,所有这些都可以被简化成我们在Obj-C中所拥有的。
NSDictionary
并使用 valueForKeyPath
,如 (jsonResponse as NSDictionary).valueForKeyPath("geometry.location.lat") as? Int
,那么它会更容易。但是我也发现了另一种从字典中获取嵌套数据的方法。+1 - GoodSp33d
objectForKey
。 - Billvar dict:NSDictionary = NSDictionary(contentsOfFile:"some/path"); var deepValue = conjugationTable["level1"]["level2"]["level3"]
编译器抱怨它“找不到接受提供的参数的下标重载。” - NRitH