如何在Objective-C中检索不在其上的JSON数据?

时间:2017-03-08 00:33:25

标签: objective-c json

我有JSON数据,看起来像这样:

{
"dataset": {
            "id": ,
            "dataset_code": "",
            "database_code": "",
            "name": "",
            "description": "",
            "refreshed_at": "",
            }
}

当我使用"数据集"转到NSLog时,JSON数据标识符打印正常。但是,我想访问下一级JSON数据,这是我想要使用的。但是,当我尝试NSLog下一级时,我在xcode中遇到错误。我的代码看起来像这样:

NSString *query = @"jsonwebsite.com";
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:query]];
_Array = [[NSMutableArray alloc] init];
_Array = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

所以,如果我使用它,它的日志就好了。

NSString *testString = [_Array valueForKey:@"dataset"];
NSLog(@"%@",testString);

但如上所述,我正在寻找下一组数据,当我尝试这样做时,它会出错。

NSString *testString = [_Array valueForKey:@"name"];
NSLog(@"%@",testString);

返回(null)。我如何能够访问此JSON数据中的名称字段?

3 个答案:

答案 0 :(得分:2)

您的代码存在很多问题。

_Array = [[NSMutableArray alloc] init];
_Array = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

在第一行中创建一个空数组没有意义,只是用第二行中的另一个对象替换它。

您的数据包含字典字典,而不是数组。您应该创建一个变量dictionary

NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

您不应使用valueForKey从字典中获取值。这是一种KVO方法。请改用objectForKey,或者更好,使用现代字典语法:

NSMutableDictionary *dataSet = dictionary[@"dataset"];

NSString *name = dataSet[@"name"];

if (name == nil) {
  NSLog(@"name is nil");
} 
else if (name.length == 0) {
  NSLog(@"name is empty");
} 
else {
  NSLog(@"Name is %@", name);
}

答案 1 :(得分:0)

您的json是NSDictionary而不是NSMutableArray,您使用NSMutableArray来接收NSDictionary错误。

测试一下:

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

NSDictionary *subDict = dict[@"dataset"];

NSLog(@"%@", subDict);

NSLog(@"%@", subDict[@"name"]);

答案 2 :(得分:-1)

更改此代码:

NSString *query = @"jsonwebsite.com";
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:query]];
_Array = [[NSMutableArray alloc] init];
_Array = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
NSString *testString = [_Array valueForKey:@"name"];
NSLog(@"%@",testString);

进入这个:

NSString *query = @"jsonwebsite.com";
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:query]];
_Array = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
NSDictionary *dataSet = [_Array objectForKey:@"dataset"];
NSString *testString = [dataSet objectForKey:@"name"];
NSLog(@"%@",testString);