4

Got a error on (Xcode6 BETA 6) if a try to get an object of string:

let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"

let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

var jsonResult:NSArray = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray

println(jsonResult.objectAtIndex(0).objectForKey("name").objectAtIndex(0))

print never get called, cause the error. Anyone a idea?

HpTerm
  • 8,151
  • 12
  • 51
  • 67
kurtanamo
  • 1,808
  • 22
  • 27

3 Answers3

10

Getting value from NSDictionary or NSArray return AnyObject object. So you should type cast to appropriate type. Try this

println(((jsonResult.objectAtIndex(0) as NSDictionary).objectForKey("name") as NSArray).objectAtIndex(0))
Yatheesha
  • 10,412
  • 5
  • 42
  • 45
1

I would suggest creating one or more classes and deserializing that JSON, to better access to the data and avoiding mistakes when accessing.

By the way by making data types more explicit it works:

let dict = jsonResult.objectAtIndex(0) as NSDictionary
let array = dict["name"] as NSArray

println(array.objectAtIndex(0))
Antonio
  • 71,651
  • 11
  • 148
  • 165
1

Another option would be to cast jsonResult to an Array<AnyObject> and use subscript syntax to get necessary value

let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"
let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
var jsonResult: AnyObject = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil);

if let lJsonArray = jsonResult as? Array<AnyObject> {
    println(lJsonArray[0].objectForKey("name")[0])
}
nsinvocation
  • 7,559
  • 3
  • 41
  • 46