IOS JSON从“JSON字典”中获取所有值

我有这个数据结构:

{ "artistlist " : [ { "performer" : "Gate Zero" }, { "performer" : "nightech" }, { "performer" : "Marko Fuerstenberg" }, ] } 

我用这行代码从NSString读取这个结构到NSDictionary:

  JSON = [NSJSONSerialization JSONObjectWithData: [[chunks objectAtIndex:1] dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: &e]; 

与: [JSON objectForKey:@"artistlist "]我得到这个结构:

 ( { performer = "Gate Zero"; }, { performer = nightech; }, { performer = "Marko Fuerstenberg"; } ) 

有没有办法“深入”?

我将如何parsing结果?

我想直接获取值或访问表演者名字的列表。 如果我在tupel中有几个值,例如表演者姓名,专辑,年份,该怎么办? 我将如何访问这些值?

谢谢。

是的,在[JSON objectForKey:@"artistlist "] ,你会得到NSDictionariesNSArray (稍微有点混乱!)。

 NSArray *performersArray = [JSON objectForKey:@"artistlist"]; for (NSDictionary *performerDic in performersArray) { NSLog(@"%@", [performerDic objectForKey:@"performer"]); } 

这应该产生每个表演者的名字。 另外,你也可以for (NSUInteger i = 0; i < [performersArray count]; i++)和访问NSDictionary *performersDic = [performersArray objectAtIndex: i] 。 从那里,你可以类似的使用[performsDic objectForKey:@"performer"]

喜欢这个:

 [[[JSON objectForKey:@"artistlist "] objectAtIndex: 1] objectForKey:@"performer"] 

它会给你"nightech"

{}对应于NSDictionary[]对应于NSArray

你将不得不使用recursion。 例如,假设您只嵌套了NSDictionaries(易于修改以使用NSArrays):

 - (void) getArtistFromJsonObject:(NSDictionary *)obj { for (NSString *key in [obj allKeys]) { id child = [obj objectForKey:key]; if ([child isKindOfClass:[NSString class]]) { // that's the actual string // NSLog(@"Found artist: %@", child); // or do whatever needed } else if ([child isKindOfClass:[NSDictionary class]]) { [self getArtistFromJsonObject:child]; } } }