怎么回事人们 - 我在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 ---赞赏任何指导
答案 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"];
并且类似于其他对象