目标C语言 从SBJSON解析器返回的数组无效(iOS)



我遇到了一个错误,使用SBJSON解析器从PHP webservice返回的响应字符串:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSError *error;
SBJSON *json = [SBJSON new];
NSArray *returnedFromWeb = [json objectWithString:responseString error:&error];
[articles_parsed removeAllObjects];
for (int i = 0; i < [returnedFromWeb count]; i++) 
{
    NSDictionary *dictColumns = [returnedFromWeb objectAtIndex:i];
    [self parseArticlesObject:dictColumns];
    dictColumns = nil;
}
在上面的objectAtIndex调用中,我收到一个无法识别的选择器发送到实例错误。当我检查数组(returnedFromWeb)中包含的值时,它显示有17个对象。但是,检查每个对象会显示以下错误:
(<invalid>) [0] = <error: expected ']' error: 1 errors parsing expression >

我已经在下面发布了SBJSON解析器为下面索引[0]处的对象返回的数据:

{
    0 =     {
        author = "CCJ Staff";
        category1 = Products;
        excerpt = "Toyo";
        modified = "2014-03-25 08:33:57";
        "short_link" = "http://www.example.com/?p=95326";
        thumbnail = "http://www.example.com/files/2014/03/ Tire.jpg";
        "thumbnail_243x243" =     "http://www.example.com/ihz.php?src=/blogs.dir/10/files/2014/03/ Tire.jpg&amp;w=243&amp;h=243&amp;q=100&amp;zc=1";
        title = "medium-duty";
    };

下面是SBJSON正在解析的字符串(缩短为只包含第一个对象,末尾的逗号是下一个对象的开始):

{"numberposts":240年,"tax_query":[{"分类":"主题"、"条款":[75、43550、14394、16564、1795年,43岁,22岁,12950年),"场":"term_id"、"orderby":"日期"、"秩序":"DESC"}]," 0 ":{"标题":"中型"、"category1":"产品",摘录:"东洋"、"修改":"2014-03-2508:33:57"、"作者":"员工"、"缩略图":"http://www.ccjdigital.com/files/2014/03/Tire.jpg","short_link":"http://www.ccjdigital.com/?p=95326"},

任何帮助都是感激的!我是相当新的iOS和SBJSON,并没有能够弄清楚为什么我的数组是无效的。

我的第一个想法是你取回的是NSDictionary而不是NSArray。要找出答案,在对返回项调用objectAtIndex之前添加一个断点,并在屏幕底部的调试器中键入:po [returnedFromWeb class]

这将告诉您返回对象的实际类。我说它可能是字典因为你所粘贴的JSON以{(大括号)开头而数组则以[

开头

因为你不能总是保证JSOn将被格式化为数组或字典,你可以做一些测试,看看它是否响应objectAtIndex:方法,作为一个例子,这将表明它是一个NSArray。

id *returnedFromWeb = [json objectWithString:responseString error:&error];
if ([returnedFromWeb respondsToSelector:@selector(objectAtIndex:)]) {
  //it's an array do array things.
} else {
  //it's a dictionary do dictionary things.
}

希望有帮助!

最新更新