4

如果尝试获取字符串对象,则会在(Xcode6 BETA 6)上出错:

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 永远不会被调用,导致错误。任何人的想法?

4

3 回答 3

10

从 NSDictionary 或 NSArray 获取值返回 AnyObject 对象。因此,您应该将类​​型转换为适当的类型。尝试这个

println(((jsonResult.objectAtIndex(0) as NSDictionary).objectForKey("name") as NSArray).objectAtIndex(0))
于 2014-08-22T07:39:14.570 回答
1

另一种选择是强制jsonResult转换为Array<AnyObject>并使用subscript语法来获取必要的值

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])
}
于 2014-08-22T07:43:26.480 回答
1

我建议创建一个或多个类并反序列化该 JSON,以更好地访问数据并避免访问时出错。

顺便说一句,通过使数据类型更明确,它可以工作:

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

println(array.objectAtIndex(0))
于 2014-08-22T07:40:55.663 回答