1

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

1 回答 1

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);
}

所以现在,除非在解析 JSON 时出错,否则nameAsData应该names是一个NSArray对象NSDictionary。然后你可以用它做任何你想做的事情——例如,要得到“John”或“Jacques”,你可以这样做:

迅速:
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
于 2015-05-24T03:40:09.370 回答