2014-02-27 116 views
1

怎么样了人---我无法通过迭代在Xcode中的数组迭代 - 希望有人能指出我在正确的direction..here的我的反应JSON响应麻烦通过阵列

NSString *[email protected]"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 ---任何指导赞赏

+0

好像 '结果' 是 '的NSArray' – Akhilrajtr

+0

如果'[响应objectForKey:@ “项目”];'返回比'其他东西NSDictio nary'或者'NSArray',你需要仔细检查你从调用中得到的'response'对象到'JSONObjectWithData:' – Aaron

回答

1

对于开启者,您的数据没有关键字@“image”的值。

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

做一个“PO结果”在调试程序时,您断点你的“for”循环的开始。它将打印出你得到的对象的类型(不管它是NSDictionary还是NSArray),并且改变你的代码来同意你的数据结构中的内容。

+0

谢谢,让我走上正确的轨道。 – Jay

1

你的JSON对象不包含数组。所以遍历它是毫无疑问的。你基本上有嵌套的字典。如果你需要做一些数组的东西,我会考虑将你的JSON的Item对象的值改为Array“[]”而不是Dictionary“{}”。这样,您甚至不必处理JSON对象中的索引。你可以免费得到它们。

“校正” JSON对象会是这个样子:

这样做,如果你想dont't调整你的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" 
     } 
    ] 
} 
0

的一种方式,它周围只是一种不定: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"]; 

同样地,对于对象的其余