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 "]
,你会得到NSDictionaries
的NSArray
(稍微有点混乱!)。
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]; } } }