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

how to parse a dictionary inside an array, which is in a dictionary

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

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

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

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

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

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

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

如果结构是固定的,并且有保证,你可以用 fixed indexes/keys:

//data in theJSONDict.

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

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

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

但这更难调试。

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

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