如何在objective-c iphone sdk中迭代嵌套字典

ldj*_*ldj 5 recursion objective-c nsdictionary

嗨我有一个json字符串转换为未将JSON框架转换为字典,我需要提取其内容.我怎么能迭代到嵌套的词典?我已经有了这段代码,可以让我看到字典:

NSDictionary *results = [responseString JSONValue]; 
NSMutableArray *catArray = [NSMutableArray array];

for (id key in results) {
    NSLog(@"key: %@, value: %@", key, [results objectForKey:key]);
    [catArray addObject:key];
    NSString *cat = key;
}
Run Code Online (Sandbox Code Playgroud)

有人可以提供一个示例,说明如何使用密钥的名称来获取所有级别的dic?

dic的结果结构如下:http://www.freeimagehosting.net/uploads/e7c020d697.png

alt text http://www.freeimagehosting.net/uploads/e7c020d697.png

谢谢

LDJ

Den*_*lov 9

你可能要尝试递归函数.

-(void)recurse:(NSDictionary *)dict counter: (int*) i parent:(NSString *) parent{
    for (NSString* key in [dict allKeys]) {
        id value = [dict objectForKey:key];
        NSLog(@"%@ -> %@", parent, key);
        if ([value isKindOfClass:[NSDictionary class]]) {
            i++;
            NSDictionary* newDict = (NSDictionary*)value;
            [self recurse:newDict counter:i parent:key];
            i--;
        } else {
            //Do smthg
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将列出所有键及其级别.


Tob*_*obi 5

尝试



for ((id) key in [results allKeys]) {
    NSLog(@"key: %@, value: %@", key, [results objectForKey:key]);
    [catArray addObject:key];
    NSString *cat = key;
}

Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

编辑:我不确定我是否理解你的结构是正确的,但我觉得你在你的词典中有一些价值,这又是dictionairies.如果你想通过位于另一个内部的dictionairy进行交互,你可以这样做:


for ((id) key in [results allKeys]) {
    id value = [results objectForKey:key];
    if ([value isKindOfClass:[NSDictionary class]]) {
        NSDictionary* newDict = (NSDictionary*)value;
        for ((id) subKey in [newDict allKeys]) {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你知道你想要的字典的特定键,你可以检查它,而不是检查值是否是字典.但也许在两种情况下检查都不是一个坏主意......