在我的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个值。我不想创建这些值的新数组,然后检索它们。问候。
答案 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方法不同获取数据,有时无法正常工作。)