我有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数据中的名称字段?
答案 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);