I'm using NSJSONSerialization to parse JSON in a Swift application. However, the returned dictionary consists of a complicated, deeply nested structure, making it impractical to have very long type declarations (e.g. Dictionary<String, Array<Dictionary<String, ....>>
).
Is there a good way of working with such a structure in Swift, where the collection's structure is very complicated and its types aren't known until runtime?
Just grab a reference to your json data as an NSDictionary:
var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
then you can reference it using subscripts:
var myValue: NSString = dict["level1"]["level2"]
myDictionary["accounts"]
might be an optional. Try: myDictionary["accounts"]?["active"]?
In Obj-C we could write,
cityName = myDictionary[@"photos"][@"region"][@"city"]
As several here have discovered, the above does not apply in Swift, at least it never has for me.
Here's how you do this in Swift for accessing three indices in an NSDictionary for a String,
let cityName = ((myDictionary!["photos"] as NSDictionary)["region"]! as NSDictionary)["city"]! as String`
I hope that in the next update to Swift all of that can be reduced to what we had in Obj-C.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With