当值为具有swiftyJSON的JSON值时,如何获取JSON数据

时间:2015-05-24 02:06:04

标签: ios json swifty-json

我在我的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"])

1 个答案:

答案 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应该是NSArrayNSDictionary个对象。然后,您可以随心所欲地做任何事情 - 例如,获得约翰"或者"雅克"你会这样做:

夫特:
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