麻烦迭代数组

时间:2014-02-27 18:07:05

标签: ios arrays json object

怎么回事人们 - 我在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 ---赞赏任何指导

3 个答案:

答案 0 :(得分:1)

对于开场白,您的数据没有键@“image”的值。

但除此之外,当你获得@“item”的对象时,它将返回的是一个包含三个字典的数组,其中键为“1”,@“2”和@“3”。做一下这些键,然后你应该能够得到子字段。

在'for'循环开始处断点时,在调试器中执行'po result'。它将打印出您所拥有的对象的类型(无论是NSDictionary还是NSArray),并更改您的代码以同意您的数据结构中的内容。

答案 1 :(得分:1)

您的JSON对象不包含数组。因此,通过它进行迭代是不可能的。你基本上有嵌套的词典。如果你需要做一些数组的东西,我会考虑将你的JSON的Item对象的值改为数组“[]”而不是字典“{}”。这样,您甚至不必处理JSON对象中的索引。你可以免费获得它们。

“Corrected”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"
      }
   ]
}

答案 2 :(得分:0)

如果你不想重构你的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"];

并且类似于其他对象