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"
                }
          ]
}

そして、ここに私の目的の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 を渡して、videos 配列を取得します。

- (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 に答える