objective-c - 字典值字典中的 iPhone NSArray

标签 objective-c cocoa json nsarray nsdictionary

我有一个以 JSON 格式返回给我的字典字典

{
    "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 => name 的字典。我知道这可以通过遍历数组,然后遍历字典中的所有值并检查值来实现,但似乎应该有一种不那么冗长的方法来执行此操作。

请原谅我的无知,因为我只是想了解 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] 将返回一个自动释放的对象。

关于objective-c - 字典值字典中的 iPhone NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048362/

相关文章:

ios - 有没有在 iOS 上为员工读取 MIDI 文件?

objective-c - 触摸事件,不限于特定 View

xcode - 菜单栏仅显示应用程序名称 - OS X

arrays - 过滤器以在 Angular js 中对 JSON 数据进行排序

java - 当通过 For 循环返回 List 时,无法在 Java 中将 List 转换为 Map

objective-c - 打印枚举的字符串表示,NSLog

objective-c - 基于单元格的 NSTableView 和基于 View 的 NSTableView 有什么区别?

objective-c - UPnP 端口映射,服务不接受连接

swift - NSPopover 自动布局问题中的 NScrollView

java - 将 HTTP "_method" header 传递给 matlab 中的 urlread2 函数