遍历数组时遇到问题

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"]; 返回的不是NSDictionaryNSArray,您需要仔细检查您从对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"];

其他对象也是如此

【讨论】:

以上是关于遍历数组时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

递归遍历家谱时遇到问题

没有 var 或 breakable:在数组遍历中遇到谓词时如何“中断”?

在 Promise 中将项目添加到数组时遇到问题

JS 原生 push对象到数组中遇到的问题

js中遍历删除数组中的项(项目中遇到的问题解决)

如何循环遍历数组