ios - 如何解析数组中的字典,该数组位于字典中

标签 ios objective-c json nsdictionary

在我的 JSON 响应中,我收到一个字典,它有一个数组,在该数组中是一个具有很少键值的字典,为了简单理解这里是 JSON 响应:

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

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

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

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

最佳答案

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

然后您需要根据对象的结构对对象进行索引。

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

//data in theJSONDict.

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

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

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

但这更难调试。

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

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

关于ios - 如何解析数组中的字典,该数组位于字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35361957/

相关文章:

objective-c - 翻译 iOS 堆栈跟踪 - viewDidUnload 上的 SIGSEGV/SEGV_ACCERR

ios - iOS 7 CoreData 中的批量更新数据

ios - 在 objective-c 中覆盖和自定义初始化

objective-c - 录制直播音频

ios - 将方法添加到UINavigationBar后退按钮?

java - Jackson:使用注释将 BigDecimal 反序列化为纯字符串

javascript - 在 Controller 中过滤json数据,正确的方法

html - 在 Twig 中使用 Html 字符串进行 Json_Encode

ios - 当用户将设备从纵向模式旋转到横向模式时,如何使UIView全屏显示

iphone - 尝试将 NSData 从 NSURLConnection 写入文件后的 SIGABRT(无法识别的选择器)