尝试从JSON数据中获取值

时间:2015-04-12 21:55:56

标签: ios objective-c json

我可以调用API并检索JSON数据。

以下代码返回字典对象:

 NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:ResponseData options:kNilOptions error:&error];


NSDictionary *hits = dataDictionary[@"hits"];

NSLog(@"%@", hits);

“hits”返回此数据:

 {
    "_id" = 521b95cf4a56d006d578c213;
    "_index" = "f762ef22-e660-434f-9071-a10ea6691c27";
    "_score" = "3.6973438";
    "_type" = item;
    fields =         {
        "brand_id" = 513fbc1283aa2dc80c000005;
        "brand_name" = Subway;
        "item_id" = 521b95cf4a56d006d578c213;
        "item_name" = "6\" Subway Melt\U00ae";
        "nf_serving_size_qty" = 1;
        "nf_serving_size_unit" = serving;
    };

我正在尝试获取“item_name”值,所以我尝试了这样:

  NSString *nameOfItem = hits[@"item_name"];

NSLog(@"%@", nameOfItem);

但是,我导致SIGABRT错误,并显示以下消息:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7f97c0d85520'

我如何检索“item_name”值?

2 个答案:

答案 0 :(得分:0)

首先,从您的错误消息中看来您的JSON输出似乎是一个数组。

您应该粘贴整个JSON或它的Sample结构。

无论如何,通过假设您的JSON包含字典数组并且每个字典都有一个名为item_name的键指向另一个字典,在这种情况下,您可以通过这种方式检索值。

NSString *nameOfItem = hits[indexOfDictionary][@"fields"][@"item_name"];

OR

NSString *nameOfItem = [[[hits objectAtIndex:indexOfDictionary] objectForKey:@"fields"] objectForKey:@"item_name"];

如评论中提到的 Hot Licks ,您需要详细了解如何阅读JSON数据。

答案 1 :(得分:-1)

这应该得到你想要的。

NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:ResponseData options:kNilOptions error:&error];

NSLog(@"%@", [[[dataDictionary objectForKey:@"hits"] objectForKey:@"fields"] valueForKey:@"item_name"]);