如何解析字典中的数组内的字典

Posted

技术标签:

【中文标题】如何解析字典中的数组内的字典【英文标题】:how to parse a dictionary inside an array, which is in a dictionary 【发布时间】:2016-02-12 11:52:45 【问题描述】:

在我的 JSON 响应中,我收到一个字典,其中包含一个数组,在该数组内部是一个包含少量键值的字典,为了便于理解,这里是 JSON 响应:

    
    weather = (
            
        description = haze;
        icon = 50n;
        id = 721;
        main = Haze;
        
      );
    

我想知道如何检索元素描述、图标、id 和 main。假设我有一个名为 str 的 NSString,我如何将 description 的值添加到这个字符串。我尝试了很多不同的东西,但似乎都没有。我认为应该工作,但没有工作的是:

str = [[[dir valueForKey:@"weather"] objectAtIndex:0] valueForKey:@"description"];

谁能告诉我如何访问这 4 个值。我不想创建这些值的新数组然后检索它们。问候。

【问题讨论】:

打印字符串并显示结果。 您是否尝试过,出于“调试”目的,在单独的行中实际执行每个调用,即获取字典,然后是第一个对象,然后是描述。我假设其中之一是nil 它可能会帮助您找出问题所在。一旦发现问题,请务必将其合并回一行。但是你并没有真正创建一个数组,你只是在引用一个现有的 看来你做对了。但是您仍然尝试过吗? [[[dir objectForKey:@"weather"] objectAtIndex:0] valueForKey:@"description"]; @iosEnthusiatic - 非常感谢,成功了! @Flexicoder - 我实际上尝试过这样做,但是 xcode 在声明 NSString 属性的地方显示了一个不熟悉的(在网络上)警告。我不得不评论该行,然后取消评论以消除警告,这很奇怪,所以我决定在这里询问它,感谢您的时间。 【参考方案1】:

使用NSJSONSerialization 将您的 JSON 数据转换为 NSObjects。

然后你需要根据它们的结构来索引你的对象。

如果结构是固定的,并且有保证,您可以使用固定的索引/键:

//data in theJSONDict.

NSArray *outerArray = theJSONDict[@"weather"];
NSDictionary *firstWeatherItem = outerArray[0];
NSString *firstItemDesc = firstWeatherItem[@"description"];

您也可以在 1 行中完成所有操作:

firstItemDesc = theJSONDict[@"weather"][0][@"description"];

但这更难调试。

如果这是来自服务器的 JSON 数据,您需要比上述代码更具防御性,并编写代码尝试从字典中获取键、测试 nil 以及使用对象计数循环遍历数组,或在盲目索引数组之前测试数组的长度。否则,如果您的输入数据的格式与您的假设不符,您可能会崩溃。

(顺便说一句,不要为此使用valueForKey。那是KVO 代码,虽然它通常有效,但它与使用 NSArray 和 NSDictionary 方法获取数据不同,有时无法正常工作。)

【讨论】:

我的导师确实指出了同样的事情,如果我尝试设置一个值但它不包含在服务器的响应中怎么办,我试过了,它被设置为 null,我也是还需要检查服务器是否发送了值? 您问“我还需要检查服务器是否发送了值吗?”。良好的编程习惯是验证从外部来源发送给您的任何数据。所以是的。

以上是关于如何解析字典中的数组内的字典的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 解析字典中的 json 对象 [关闭]

解析json字典,数组中的数组?在更深的巢穴中获取钥匙对象?

解析 JSON 字典时调试器中的不同类型

如何解析对象内的 JSON 字典

将3个列表解析为python中的字典列表

iOS:如何从一个字典内的数组内的对象中获取值?