如何解析字典中的数组内的字典
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 对象 [关闭]