ios - 当值是带有 swiftyJSON 的 JSON 值时,如何获取 JSON 数据

标签 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"}]

如何获取 John 或 Jacques 的值? 我试过了,但没用...

println(who[0]["name"][0]["name"])

最佳答案

name 的值本身就是一个 JSON 字符串。

将字符串转换为 NSData实例(使用正确的字符串编码 - 我在这里只使用 NSUTF8StringEncoding 作为示例,因为它通常适用于大多数情况):

swift :
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应该是 NSArrayNSDictionary对象。然后你可以用它做任何你想做的事——例如,要得到“John”或“Jacques”,你可以这样做:

swift :
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/

相关文章:

json - Swift - 将 [[String :Any? ]] 转换为数据

json - 使用 SwiftyJSON 解析具有相似元素的 JSON

ios - 我怎样才能重写这个函数,让它使用 SwiftyJSON 而不是 JSON.swift?

json - 如何将 PostgreSQL jsonb_array_elements 与 WHERE <value> IN 子句一起使用

javascript - 这个json格式怎么写呢?

swift - 将 SwiftyJSON 映射到数组

ios - 如何在 iOS 应用程序中减小谷歌地图的屏幕尺寸

ios - 检查用户是否取消了 SKPaymentTransaction

ios - 如何处理CKNotificationInfo 'desiredKeys' max 3 keys?

ios - 在 xcode 6 swift 中单击按钮时关闭我的 containerview(= 应用程序的弹出窗口)