2015-04-12 86 views
-1

我可以调用API并检索JSON数据。试图从JSON数据中获取值内的值

下面的代码返回字典对象:

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


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

NSLog(@"%@", 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”值?

+0

抱歉,但这看起来不是有效的JSON。无论如何,我看到“字段”下的“item_name” –

+0

错误消息告诉你,你有一个数组,但你显示的命中是一个字典。这是从您的日志完整打印输出?尝试记录[点击课程],看看有什么。 – rdelmar

+0

“点击”没有返回上面的数据。在上面的清单中省略了数据周围的'()'字符。学习如何阅读JSON! –

回答

-1

这应该得到你想要的。

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

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

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

您应该粘贴整个JSON或其样本结构。

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

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

OR

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

正如在评论中提到热舔,你需要阅读更多关于如何阅读JSON数据。

+0

这并不是提供了一个问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – Irfan

+0

谢谢!更新! –