【问题标题】: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 对象

标签: ios arrays json object


【解决方案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"];
      

      其他对象也是如此

      【讨论】:

        猜你喜欢
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多