我遇到了一个错误,使用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&w=243&h=243&q=100&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.
}
希望有帮助!