2013-04-16 74 views
-1

林与Flickr和样品中的工作取我得到这样的:如何从NSDictionary内的NSDictionary中获取所有值?

{ 
    "api_key" =  { 
     "_content" = 3c6eeeae4711a5f478d3da796750e06b; 
    }; 
    format =  { 
     "_content" = json; 
    }; 
    method =  { 
     "_content" = "flickr.test.echo"; 
    }; 
    nojsoncallback =  { 
     "_content" = 1; 
    }; 
    stat = ok; 
} 

这与5个条目(API_KEY,格式,方法,nojsoncallback & STAT)的字典。前4个词条本身就是词典。

首先,我的原始字典中有第5个元素,它不是字典,它只是原始字典中的最后一个条目(一个stat = ok)。此外,我希望每个子条目中的_content键出现在我的单个单元格中,但我不想硬编码任何值。我有有没有建立一个数组?

+1

你尝试过什么?这是NSDictionary的一个非常直接的用法。你知道结构,你知道所有的钥匙。 – matt

+0

想到一个循环。 (也许,你实际上必须看看NSDictionary文档。) –

+0

是的,但我想写一个循环来获取每个objectForKey而不知道键名称。 – marciokoko

回答

2

试试这个

for (NSString *key in dictionary){ 
    id object = dictionary[key]; 
    if ([object isKindOfClass:[NSDictionary class]]) { 
    //Now you can work on the dictionary object 
    } 
} 
+0

好吧,我尝试了你的建议,像这样:'for(NSString * key in flickrDictionary){ id object = flickrDictionary [key]; if([object isKindOfClass:[NSDictionary class]]){cell_textLabel.text = [object valueForKey:@“_ content”]; '因此,我说,如果第一个键(api_key)的对象是一个字典,就是它的_content键并将其放入单元格中。但我得到的所有5个单元格中的api_key :(Id必须以某种方式使用indexpath,对吗?我希望每个子条目中的_content键出现在我的单个单元格中,但我不想硬编码任何值。 – marciokoko

4

NSDictionary有一个漂亮的小方法,称为valueForKeyPath。这就是你的救世主。

[dict valueForKeyPath:@"api_key._content"] 
[dict valueForKeyPath:@"format._content"] 
[dict valueForKeyPath:@"method._content"] 
[dict valueForKeyPath:@"nojsoncallback._content"] 

它能做什么是穿越的关键路径,并在每个JSON子取的content值。否则,你将不得不写一个for-loop并通过它循环。整洁吧?

+0

谢谢,这很方便! :)但是,我需要分别获取每个值并将其放入不同的单元格中。所以基本上我必须在这里创建一个开关,在正确的单元格中输入正确的值,对吗? – marciokoko

+0

是的,如果你想把每个值放在不同的单元格中,你可能必须在'UITableViewCell'的'index path'上放一个'if-else'。上面提到的JSON解析需要在顶级循环中完成。 –

+0

我到目前为止...'for(NSString * key in flickrDictionary){ NSLog(@“the key is%@”,flickrDictionary [key]); id object = flickrDictionary [key];如果([object isKindOfClass:[NSDictionary class]]){//第一个4是数组-crsh-dicts NSLog(@“object valueForKey is%@”,//这个将会是apikey,格式, [object valueForKey:@“_ content”]); cell.textLabel.text = [object valueForKey:@“_ content”]; } else { cell.textLabel.text = flickrDictionary [key]; } }'我猜不好把它放到一个数组中 – marciokoko