IOS JSON从“JSON Dict”中获取所有值

时间:2012-01-05 21:27:55

标签: iphone objective-c ios json

我有这个数据结构:

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

                  ] 
   }

我用这行代码将NSString中的这个结构读入NSDictionary:

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

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

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

有没有办法去“更深层次”?

我将如何解析生成的结构?

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

谢谢。

3 个答案:

答案 0 :(得分:9)

是的,在你[JSON objectForKey:@"artistlist "]之后,你得到NSArray NSDictionaries(稍微有些混乱!)。

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

答案 1 :(得分:2)

像这样:

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

它会给你"nightech"

{}对应NSDictionary[]对应NSArray

答案 2 :(得分:1)

你必须使用递归。例如,假设您只有嵌套的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];
        }
    }
}