当值是 JSON 值时,我如何获取 JSON 数据与 swiftyJSON
How can I get JSON data when the value is a JSON value with swiftyJSON
我在我的 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
应该是 NSArray
个 NSDictionary
对象。然后你可以用它做任何你想做的事——例如,要得到 "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...
中获取一些数据时遇到了一些问题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