遍历数组时遇到问题
Posted
技术标签:
【中文标题】遍历数组时遇到问题【英文标题】:Trouble iterating through Array 【发布时间】:2014-02-27 18:07:05 【问题描述】:进展如何——我在 xcode 中——希望有人能指出我正确的方向..这是我的响应 json 响应
NSString *str=@"jsonUrlremoved";
NSURL *url=[NSURL URLWithString:str];
NSData *data=[NSData dataWithContentsOfURL:url];
NSError *error=nil;
id response=[NSJSONSerialization JSONObjectWithData:data options:
NSJSONReadingMutableContainers error:&error];
"item":
"1":
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
,
"2":
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
,
"3":
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
我尝试过转换为 nsdictionary 以及 nsobject 和 nsarray,但没有成功(因为我是菜鸟)
NSDictionary *results = [response objectForKey:@"item"];
for (NSDictionary *result in results)
NSString *image = [result objectForKey:@"image"];
NSString *desc = [result objectForKey:@"description"];
NSString *title = [result objectForKey:@"title"];
应用程序崩溃或返回 null --- 感谢任何指导
【问题讨论】:
似乎“结果”是“NSArray” 如果[response objectForKey:@"item"];
返回的不是NSDictionary
或NSArray
,您需要仔细检查您从对JSONObjectWithData:
的调用中获得的response
对象
【参考方案1】:
对于开瓶器,您的数据没有键 @"image" 的值。
但除此之外,当您获取@"item" 的对象时,它将返回一个包含另外三个字典的数组,键为@"1"、@"2" 和@"3"。获取这些键,然后您应该能够获取子字段。
当您在“for”循环开始处断点时,在调试器中执行“po result”。它会打印出你拥有的对象的类型(无论是 NSDictionary 还是 NSArray)并更改你的代码以同意你的数据结构中的内容。
【讨论】:
【参考方案2】:您的 JSON 对象不包含数组。所以迭代它是没有问题的。你基本上有嵌套的字典。如果您需要做一些数组的事情,我会考虑将您的 JSON 的 Item 对象的值更改为数组“[]”而不是字典“”。这样,您甚至不必处理 JSON 对象中的索引。您可以免费获得它们。
“更正后”的 JSON 对象如下所示:
"item":[
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
,
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
,
"title":"Item Title",
"description":"long description",
"date":" March 01, 2014"
]
【讨论】:
【参考方案3】:如果您不想重组 JSON 的一种方法可以如下所示,这只是一种不被规定的方法:P
NSDictionary *results = [response objectForKey:@"item"];
NSString *image = [[result objectForKey:@"1"]objectForKey:@"image"] ;
NSString *desc = [[result objectForKey:@"1"]objectForKey:@"description"];
NSString *title = [[result objectForKey:@"1"]objectForKey:@"title"];
其他对象也是如此
【讨论】:
以上是关于遍历数组时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章