1

我能够解析我的 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"
                }
          ]
}

这是我的objective-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”:“publicité”相对应的所有“titre_video”。所以它应该包含“Chauffage Compris”和“Nifff 2012”。

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

非常感谢。

尼古拉斯

4

2 回答 2

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;
}
于 2013-07-29T12:53:09.313 回答
0

{ } 表示 NSDictionary [ ] 表示 NSArray

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

希望它会帮助你。

于 2013-07-29T13:15:38.557 回答