我在我的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"}]
我如何获得约翰或雅克的价值? 我尝试了这个,但它不起作用......
println(who[0]["name"][0]["name"])
答案 0 :(得分:1)
name
的值本身就是一个JSON字符串。
将字符串转换为NSData
实例(使用正确的字符串编码 - 我在这里仅使用NSUTF8StringEncoding
作为示例,因为它通常适用于大多数情况):
var name : NSString = who[0]["name"] as! NSString
var nameAsData : NSData? = name.dataUsingEncoding(NSUTF8StringEncoding)
的目标C:强>
NSString *name = who[0][@"name"];
NSData *nameAsData = [name dataUsingEncoding:NSUTF8StringEncoding];
然后使用以下代码将该数据转换为JSON对象(在本例中为数组):
的夫特:强>var error : NSError?
var names : NSArray = NSJSONSerialization.JSONObjectWithData(nameAsData!, options: nil, error: &error) as! NSArray;
if (error != nil) {
NSLog("Error reading JSON: %@", error!.localizedDescription)
}
的目标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
个对象。然后,您可以随心所欲地做任何事情 - 例如,获得约翰"或者"雅克"你会这样做:
NSLog("first name: %@", names[0]["name"] as! NSString) // John
NSLog("second name: %@", names[1]["name"] as! NSString) // Jacques
的目标C:强>
NSLog(@"first name: %@", names[0][@"name"]); // John
NSLog(@"second name: %@", names[1][@"name"]); // Jacques