2009-06-26 59 views
3

我这是在JSON格式返回给我辞书字典iPhone的NSArray值

{ 
    "neverstart": { 
     "color": 0, 
     "count": 0, 
     "uid": 32387, 
     "id": 73129, 
     "name": "neverstart" 
    }, 
    "dev": { 
     "color": 0, 
     "count": 1, 
     "uid": 32387, 
     "id": 72778, 
     "name": "dev" 
    }, 
    "iphone": { 
     "color": 0, 
     "count": 1, 
     "uid": 32387, 
     "id": 72777, 
     "name": "iphone" 
    } 
} 

我也有包含的ID的一个项目需要一个NSArray。例如[72777,73129]

我需要做的是得到一个字典id =>名称的数组中的项目。我知道这是可能的迭代通过数组,然后遍历所有的值在字典中,并检查值,但它似乎应该有一个不太长的方法来做到这一点。

请原谅我的无知,因为我只是想找到解决iPhone SDK和学习Objective C和Cocoa的方法。

+0

我的过早答案道歉 - 我投了删除它。你能澄清你已经将JSON解析为NSDictionarys的层次结构吗? – teabot 2009-06-26 10:45:19

+1

+1好问题。我重新添加了“json”,并将“iphone”更改为“cocoa”,因为这个问题更普遍适用。 – 2009-06-26 14:31:35

+0

是的,我已经将JSON解析为NSDictionaries的层次结构。这是非常简单的与json框架 – Xetius 2009-06-27 17:26:27

回答

5

首先,由于您使用JSON,我希望你已经发现BSJSONAdditions和/或json-framework,两者的开源项目解析JSON成原生可可结构为你。 This blog post给出了如何使用后者从JSON字符串获取NSDictionary的想法。

问题就变成了在字典中查找匹配值的问题之一。我不知道有一种方法可以满足您的需求 - Cocoa框架非常强大,但它的设计非常通用且灵活。然而,它不应该太硬放在一起在没有太多的线条......(因为你是在iPhone编程,我将使用快速列举使代码更干净。)

NSDictionary* jsonDictionary = ... 
NSDictionary* innerDictionary; 
NSArray* requiredIDs = ... 
NSMutableDictionary* matches = [NSMutableDictionary dictionary]; 
for (id key in jsonDictionary) { 
    innerDictionary = [jsonDictionary objectForKey:key]; 
    if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]]) 
     [matches setObject:[innerDictionary objectForKey:@"name"] 
        forKey:[innerDictionary objectForKey:@"id"]]; 
} 

这代码可能有拼写错误,但概念应该是合理的。另请注意,致电[NSMutableDictionary dictionary]将返回一个自动释放对象。

2

你有没有尝试过这种方法的NSDictionary:

+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys