我能够解析我的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”。
我知道这是一个简单的问题,但我已经搜索了一段时间但仍然无法做到。
非常感谢。
尼古拉斯
答案 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()打印数据。
希望它会对你有所帮助。