我在我的 iOS 项目中使用 swiftyJSON 但我在获取有效 JSON 中的一些数据时遇到了一些问题...
whoJson:
[
{
"name": "[{\"code\":\"en\",\"name\":\"John\"},{\"code\":\"fr\",\"name\":\"Jacques\"}]",
"id": 1
},
{
"name": "[{\"code\":\"en\",\"name\":\"Bob\"},{\"code\":\"fr\",\"name\":\"Robert\"}]",
"id": 11
}
]
使用这段代码:
println(who[0]["name"])
结果是:
[{"code":"en","name":"John"},{"code":"fr","name":"Jacques"}]
如何获取 John 或 Jacques 的值? 我试过了,但没用...
println(who[0]["name"][0]["name"])
最佳答案
name
的值本身就是一个 JSON 字符串。
将字符串转换为 NSData
实例(使用正确的字符串编码 - 我在这里只使用 NSUTF8StringEncoding
作为示例,因为它通常适用于大多数情况):
var name : NSString = who[0]["name"] as! NSString
var nameAsData : NSData? = name.dataUsingEncoding(NSUTF8StringEncoding)
objective-c :
NSString *name = who[0][@"name"];
NSData *nameAsData = [name dataUsingEncoding:NSUTF8StringEncoding];
然后使用以下方法将该数据转换为 JSON 对象(在本例中为数组):
swift :var error : NSError?
var names : NSArray = NSJSONSerialization.JSONObjectWithData(nameAsData!, options: nil, error: &error) as! NSArray;
if (error != nil) {
NSLog("Error reading JSON: %@", error!.localizedDescription)
}
objective-c :
NSError *__autoreleasing error;
NSArray *names = [NSJSONSerialization JSONObjectWithData:nameAsData options:kNilOptions error:&error];
if (error) {
NSLog(@"Error reading JSON: %@", error.localizedDescription);
}
所以现在,除非在 nameAsData
中解析 JSON 时出错, names
应该是 NSArray
的 NSDictionary
对象。然后你可以用它做任何你想做的事——例如,要得到“John”或“Jacques”,你可以这样做:
NSLog("first name: %@", names[0]["name"] as! NSString) // John
NSLog("second name: %@", names[1]["name"] as! NSString) // Jacques
objective-c :
NSLog(@"first name: %@", names[0][@"name"]); // John
NSLog(@"second name: %@", names[1][@"name"]); // Jacques
关于ios - 当值是带有 swiftyJSON 的 JSON 值时,如何获取 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419411/