在Objective C中解析JSON信息(多个级别)

时间:2013-07-29 12:46:44

标签: ios json

我能够解析我的JSON文件的一部分,但如果我想深入了解结构,我就迷失了。这是我的JSON:

{
"album":[
                {
                "album_titre":"Publicité",
                "album_photo":"blabla.jpg",
                "album_videos":[
                                {
                                "titre_video":"Chauffage Compris",
                                "duree_video":"01'25''",
                                "photo_video":"chauffage.jpg",
                                "lien_video":"www.bkjas.jhas.kajs"
                                },
                                {
                                "titre_video":"NIFFF 2012",
                                "duree_video":"01'43''",
                                "photo_video":"nifff.jpg",
                                "lien_video":"www.bkjas.jhas.kajs"
                                }
                                ]
                },
                {
                "album_titre":"Events",
                "album_photo":"bloublou.jpg",
                "album_videos":[
                                {
                                "titre_video":"Auvernier Jazz",
                                "duree_video":"01'15''",
                                "photo_video":"auvernier.jpg",
                                "lien_video":"www.bkjas.jhas.kajs"
                                },
                                {
                                "titre_video":"NIFFF 2011",
                                "duree_video":"01'03''",
                                "photo_video":"nifff2011.jpg",
                                "lien_video":"www.bkjas.jhas.kajs"
                                }
                                ]
                },
                {
                "album_titre":"Culture",
                "album_photo":"bilibl.jpg"
                },
                {
                "album_titre":"Postproduction",
                "album_photo":"bizoubzou"
                }
          ]
}

这是我的目标-c代码:

- (void)fetchedData:(NSData *)responseData {

NSError* error;
NSDictionary *document = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

if (document==nil)
{
    NSLog( @"oops\n%@", error);
}

NSArray *album = document[@"album"];


for( NSDictionary *albumDictionary in album )
{
    [album_titre addObject:albumDictionary[@"album_titre"]];
    [album_photo addObject:albumDictionary[@"album_photo"]];

    for( NSDictionary *album_videosDictionary in albumDictionary[@"album_videos"])
    {
        [titre_video addObject:album_videosDictionary[@"titre_video"]];
        [duree_video addObject:album_videosDictionary[@"duree_video"]];
        [photo_video addObject:album_videosDictionary[@"photo_video"]];
        [lien_video addObject:album_videosDictionary[@"lien_video"]];
    }

}

[self.tableView reloadData];

}

我无法实现的是创建一个数组,例如包含对应于“album_titre”的所有“titre_video”:“publicité”。所以它应该包含“Chauffage Compris”和“Nifff 2012”。

我知道这是一个简单的问题,但我已经搜索了一段时间但仍然无法做到。

非常感谢。

尼古拉斯

2 个答案:

答案 0 :(得分:4)

关键是要了解JSON结构:

  

{} - - 这意味着底层对象是字典。

[ ]  -- this means the underlyingobject is an array

 - (void)fetchedData:(NSData *)responseData {

    NSError* error;
    NSDictionary *document = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

    // all titre:video for album_titre:publicite
    NSArray *albumArray = [document objectForKey:@"album"];
    NSDictionary *dict = [albumArray objectAtindex:0];
    NSArray *videos = [dict objectForKey:@"album_videos"];

   // to fetch Videos inside album_videos
   // here you will get al the videos inside key titre_video
   NSMutableArray *titreVideoArray = [[NSMutableArray alloc]init];
   for(int i=0; i< videos.count; i++){
      NSDictionary *dict = [videos objectAtindex:i];
      NSArray *titreVideos = [dict objectForKey:@"titre_video"];
      [titreVideoArray addObject: titreVideos];
    }
   }

您似乎想要获取与不同“album_titre”相关的所有视频。 我建议你使用NSPredicate。

NSArray *videos = [self videosArrayForTitle:@"Publicité" albumArray:albumArray];

这里我们从上面传递title和albumArray来获取视频数组。

- (NSArray *)videosArrayForTitle:(NSString *)title albumArray:(NSArray *)albumArray{
NSPredicate *resultPredicate=[NSPredicate predicateWithFormat:@"SUBQUERY(album_titre, $content, $content      CONTAINS %@).@count > 0", title];
NSArray *searchResults=[albumArray filteredArrayUsingPredicate:resultPredicate];
NSArray *videos = [searchResults objectForKey:@"album_videos"];
return videos;
}

答案 1 :(得分:0)

{}表示NSDictionary []表示NSArray

将您的json复制到文本编辑文件中并深入了解。深入时,可以使用NSLog()打印数据。

希望它会对你有所帮助。