如何解析数组中的字典,这是在字典中

时间:2016-02-12 11:52:45

标签: ios objective-c json nsdictionary

在我的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个值。我不想创建这些值的新数组,然后检索它们。问候。

1 个答案:

答案 0 :(得分:1)

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

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

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

//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方法不同获取数据,有时无法正常工作。)