2016-06-10 57 views
2

我有一个JSON数组与多个对象,我不知道如何抓住“url”标记作为NSArray或NSDictionary,并在Tableview中显示图像URL。我无法更改JSON数据格式。如何执行此操作?iOS 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); 
+0

是self.jsonData是关键页面阵列? –

+0

是的。 @NiravDoctorwala – Mukesh

+0

@Mukesh,看看我的代码。 – Vyacheslav

回答

0

要查看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]; 
0

您有数组由另一个数组包装。 所以,用这个方向:

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

我会建议使用Mantel或JSONModel库解析对象和有体面的DTO。

0

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

然后它只是一个挖掘的问题。当你看到{},您可以添加一个字典,当你看到[],你添加阵列,直到你达到你的URL对象:)

我不写的代码,因为它是非常容易的,只是一个混字典的objectForKeys和阵列的objectAtIndex

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

如果你对json感到困惑,我建议你尝试给你的json解析器一个简单的json(你自己核心它只是上面,它真的只是为了测试)。

小编建议:

给它1个对象,然后2的简单数组,然后把数组中的字典,然后二,等你务必让JSON更复杂,直到你真正了解它是如何作品。然后,你最终有一个假的JSON就像你的真实的,你可以删除假冒使用真正的:)

其他建议:

有很多JSON解析库,让你创造对象模型,您可以在其中创建(例如)具有与JSON结构相匹配的ID,标题,封面URl等的Page对象,然后您只需告诉解析器“使该JSON成为一个页面!”。瞧,你有一个页面。我不知道ios中的任何json库,但人们肯定会把它链接到这里,所以试试吧!它们非常易于使用,并使json解析非常简单。而且,你不必映射一切手动喜欢你做;)