如何解析数组中的字典,它在字典中
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 方法获取数据,有时无法正常工作。)
在我的 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 方法获取数据,有时无法正常工作。)