我有一个字典词典,它以 JSON格式返回给我 { "neverstart": { "color": 0, "count": 0, "uid": 32387, "id": 73129, "name": "neverstart" }, "dev": { "color": 0, "count": 1, "uid": 32387, "id": 72778, "name": "dev" }, "iphone": { "co
{ "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" } }
我还有一个NSArray,其中包含项目所需的id.例如[72777,73129]
我需要做的是获取id =>的字典.数组中项目的名称.我知道这可以通过迭代数组,然后循环遍历Dictionary中的所有值并检查值,但似乎应该有一个不那么冗长的方法来做到这一点.
请原谅我的无知,因为我只想找到解决iPhone SDK的方法并学习Objective C和Cocoa.
首先,由于您使用的是JSON,我希望您已经找到了 BSJSONAdditions和/或 json-framework,它们都是用于将JSON解析为本机Cocoa结构的开源项目. 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]的调用将返回一个自动释放的对象.