iOS JSON解析,包含多个数组的数组

我有一个带有多个对象的JSON数组,我不知道如何将“url”标记作为NSArray或NSDictionary来获取并在Tableview中显示该图像URL。 我无法更改JSON数据格式。我该怎么做?

以下是JSON响应的样子:

{ "meta": { "total_count": 10 }, "pages": [ { "id": 7, "meta": { "type": "dashboard.NewsEvents", "detail_url": "http://suno.to/api/v1/pages/7/" }, "title": "NoEvent", "created_at": "2016-03-06T10:42:19.646000Z", "cover_url": [ [ { "url": "/media/images/Maha_Shivratri2.original.jpg", "title": "Maha Shivratri2.jpg" }, { "url": "/media/images/Maha_Shivratri1.original.jpg", "title": "Maha Shivratri1.jpg" } ], [ { "url": "/media/images/Celebrations.original.jpg", "title": "Celebrations.jpg" }, { "url": "/media/images/Crew.original.jpg", "title": "Crew.jpg" }, { "url": "/media/images/World_record.original.jpg", "title": "World record.jpg" }, { "url": "/media/images/AI_pilots.original.jpg", "title": "AI pilots.jpg" } ], [ { "url": "/media/images/CbVv-VbWEAAmwv_.original.jpg", "title": "DAL SWARAJ YATRA" }, { "url": "/media/images/CbVv_-TWwAE7RjM.original.jpg", "title": "DAL SWARAJ YATRA" }, { "url": "/media/images/CbVv_SmXIAALQP8.original.jpg", "title": "DAL SWARAJ YATRA" }, { "url": "/media/images/CahEc--UkAArc_z.original.jpg", "title": "DAL SWARAJ YATRA" } ] ] }, { "id": 2530, "meta": { "type": "dashboard.NewsEvents", "detail_url": "http://suno.to/api/v1/pages/2530/" }, "title": "World Culture Festival", "created_at": "2016-03-12T06:59:21.023000Z", "cover_url": [ [ { "url": "/media/images/Security.original.jpg", "title": "Security check" } ], [ { "url": "/media/images/Elephant_statues.original.jpg", "title": "Elephant" } ], [ { "url": "/media/images/6.original.jpg", "title": "Stage" }, { "url": "/media/images/4.original.jpg", "title": "Stage" } ] ] }, { "id": 2675, "meta": { "type": "dashboard.NewsEvents", "detail_url": "http://suno.to/api/v1/pages/2675/" }, "title": "Holi in Barsana", "created_at": "2016-03-17T12:35:09.308000Z", "cover_url": [ [ { "url": "/media/images/Brajwasi_playing_holi_.original.jpg", "title": "Holi in Barsana" }, { "url": "/media/images/dancing_.original.jpg", "title": "Holi in Barsana" }, { "url": "/media/images/holi.._.original.jpg", "title": "Holi in Barsana" }, { "url": "/media/images/holi..._.original.jpg", "title": "Holi in Barsana" } ], [ { "url": "/media/images/Lathmar_holi_19_n54f7LJ.original.jpg", "title": "Lathmar Holi in Barsana" } ], [ { "url": "/media/images/Lathmar_holi_17.original.jpg", "title": "Lathmar Holi in Barsana" }, { "url": "/media/images/Lathmar_holi_20.original.jpg", "title": "Lathmar Holi in Barsana" } ] ] }, 

我正在使用此代码来获取“url”数组。 Plz纠正我?

  NSArray *imageUrlArray = [[self.jsonData objectAtIndex:indexPath.row]objectForKey:@"cover_url"]; NSLog(@"IMAGE URL ARRAY:%@",imageUrlArray); NSString *imageUrl = [imageUrlArray valueForKey:@"url"]; NSLog(@"IMAGE URL:%@",imageUrl); 

查看JSON结构 – http://jsonviewer.stack.hu/

 NSMutableArray* imageurlArray = [NSMutableArray new]; NSArray* jsonArray = jsonData[@"pages"]; for (int i = 0; i<[jsonArray count]; i++) { NSArray* coverUrlArray = jsonArray[i][@"cover_url"]; for (int t = 0; t< [coverUrlArray count]; t++) { NSArray* UrlArray = coverUrlArray[t]; for (int x = 0; x<[UrlArray count]; x++) { [imageurlArray addObject:UrlArray[x][@"url"]]; } } } NSLog(@"imageurlArray: %@", imageurlArray); //imageurlArray contains all url //In cell for row at indexpath --> use imageurlArray[indexPath.row]; 

你有另一个数组包装的数组。 所以,使用这个方向:

 NSDictionary *json=//..initialized NSArray *pages = [json valueForKey@"pages"]; NSDictionary *page = [pages objectAtIndex:0]; NSArray *ar1 = [page valueForKey@"cover_url"]; NSArray *ar2 = [ar1 objectAtIndex:0]; NSDictionary *elem = [ar2 objectAtIndex:0]; NSString *value = [elem valueForKey@"url"]; 

我建议使用Mantel或JSONModel库来解析对象并拥有不错的DTO。

当你处理这样的事情时,我建议把完整的json放在http://jsonviewer.stack.hu/中,这样你就可以看到正确的结构而不会感到困惑。

那么这只是一个挖掘的问题。 当你看到{}时,你添加一个字典,当你看到[]时,你添加一个数组,直到你到达你的url对象:)

我不是在编写代码,因为它非常简单,只是用于字典的objectForKeys和用于数组的objectAtIndex的混合。

最后一层只是对象,因此它们像任何其他对象一样被处理。

如果你对json感到困惑,我建议你尝试给你的json-parser一个简单的json(你自己硬核就在上面,它只是用于测试)。

小建议:

给它一个简单的1个对象数组,然后是2,然后将数组放入dict,然后放入两个等等,然后你继续使json更复杂,直到你真正理解它是如何工作的。 然后你最终会有一个假的json,就像你的真实一样,你可以删除假的并使用真实的:)

其他建议:

有许多json解析库可以让你创建对象模型,你可以创建(例如)一个Page对象,它有一个ID,一个标题,一个封面URl等,它们与JSON结构相匹配,然后你就知道了解析器“使JSON成为一个页面!” 瞧,你有一个Page。 我不知道ios中的任何json库,但是人们肯定会在这里链接它,所以试一试吧! 它们非常易于使用,使json解析非常简单。 而且,您不必像手动那样手动映射所有内容;)