使用 Objective C 转换 JSON 并构建字典

Posted

技术标签:

【中文标题】使用 Objective C 转换 JSON 并构建字典【英文标题】:Converting JSON and building a Dictionary using Objective C 【发布时间】:2015-06-27 06:42:01 【问题描述】:

我有一个非常复杂的 JSON 数据。我尝试使用目标 c 编程进行解析。 JSON数据如下所示(这里我给出了简单的格式来解释,但它有很深的层次化):


    "university": "CUNY",
    "results": 
        "Engineering": 200,
        "Computer Science": 298,
        "Life Science": 28
    

使用NSJSONSerialization,我尝试解决这个问题并使用以下代码:

NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
[parsedObject objectForKey:@"results"];

并得到结果。但是我需要一个像myResultDict 这样的字典,它将由results 组成,这样我就可以实现其他功能。

谁能给我一个小提示如何做到这一点?

【问题讨论】:

您的第二行检索结果字典,但不对其进行任何操作。您需要将该表达式的结果分配给NSDictionary * 类型的变量 知道了! NSDictionary * = parsedObject objectForKey:@"results"]; :) 对于像这样可能容易出错的事情,不要错过捕获和报告错误的机会(即检查parsedObject != nil,然后报告错误(您已设置为NULL )。 【参考方案1】:

当您使用NSJSONSerialization 获取解析后的数据时,它会为您提供包含多个键值对的解析字典。

然后通过获取结果键,您可以获得结果字典。

例如:

NSDictionary *myResultDict = [parsedDictionary objectForKey:@"results"];

【讨论】:

注意:使用objectForKey 而不是valueForKey【参考方案2】:

试试这个方法:

NSDictionary *dic = @@"university": @"CUNY", @"results" : @@"Engineering": @200, @"Computer Science": @298, @"Life Science": @28;

[self getSubDictionaryWithDictionary:dic];

这个方法只记录NSDictionary里面的值,如果你想处理NSArray这种类,由你决定.. :)

- (void)getSubDictionaryWithDictionary:(NSDictionary *)dictionary

    for (id key in [dictionary allKeys])
    
        id object = [dictionary objectForKey:key];

        NSLog(@"key:%@ value:%@",key, object);

        if ([object isKindOfClass:[NSDictionary class]])
        
            [self getSubDictionaryWithDictionary:object];
          
    

这会提取嵌套字典中的所有字典,您可以根据需要对其进行修改.. :)

希望这有帮助.. 干杯.. :)

【讨论】:

以上是关于使用 Objective C 转换 JSON 并构建字典的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective c 中难以处理 json 格式

AFNetworking JSON 到 UITableView - Objective-C

Objective-C:如何将以下 JSON 转换为可用数据

使用 Objective C 解析 JSON 的弹性

将json调用语法从Objective-C转换为Swift的正确方法是啥?

使用 MULTIPLE 参数从 Objective C 调用 JSON 服务