从SBJSON解析器返回的数组无效(iOS)

时间:2014-03-25 16:18:38

标签: ios objective-c sbjson

我在从PHP Web服务返回的响应字符串上使用SBJSON解析器时遇到错误:

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”, “排序依据”: “日期”, “命令”: “DESC”}], “0”:{ “标题”: “中型”, “类别1”: “产品”,   摘录“:”东洋“‘修改’:” 2014年3月25日   8时33分57" 秒, “作家”: “工作人员”, “缩略图”: “http://www.ccjdigital.com/files/2014/03/Tire.jpg”, “short_link”:“HTTP:// www.ccjdigital.com/?p=95326" },

任何帮助表示赞赏!我是iOS和SBJSON的新手,并且无法弄清楚为什么我的数组无效。

1 个答案:

答案 0 :(得分:1)

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

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

开头]开头

由于您无法始终保证将JSOn格式化为数组或字典,因此您可以进行一些测试以查看它是否响应objectAtIndex:方法,作为示例,它将指示它&# 39;是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.
}

希望有所帮助!