我正在尝试从yelp搜索结果中解析经过验证的JSON。
这正确地按预期吐出json(在模拟器浏览器和我自己的浏览器中确认)。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSString *dump = [[[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"Did Recieve data: %@", dump);
[JSONData appendData:data];
}
但是当我的连接完成加载时,我很难提取结果并解析数据:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Connection Did Finish Loading");
NSError *error = nil;
id cureLocations = [[CJSONDeserializer deserializer] deserializeAsDictionary:JSONData error:&error];
[JSONData release];
NSLog(@"Connection finished loading: %@", error);
}
我得到:连接完成加载:错误Domain = CJSONDeserializerErrorDomain Code = -11“无法完成操作。(CJSONDeserializerErrorDomain error -11。)”
我从SBJSON切换到TouchJSON,因为我无法从该框架中提取它。我试图将其加载到Dictionaries和Arrays中,结果为null。在这一点上,我一直在键盘上敲了几个小时,非常感谢任何输入。
我是个假人。我没有初始化JSONData。请接受我的浪费时间的道歉并感谢您的建议。
答案 0 :(得分:1)
SBJSON是一个相当不错且众所周知的解析器。如果它没有解析你的输入,你可能会认为这是因为输入真的很糟糕。如果TouchJSON也没有解析它,输入肯定坏。所以你的JSONData
对象会变得狡猾。
我建议您使用connectionDidFinishLoading
方法将JSON数据打印到控制台,然后尝试重新验证它。查看您传递给CJSON的数据对象中的实际内容。
答案 1 :(得分:0)
呃,在对应用程序进一步审核之后,似乎我急忙将我的样本复制到这个项目中,忘了初始化JSONData:
self.JSONData = [[[NSMutableData alloc] init]autorelease];
然后我更新了didReceiveData方法:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[[self JSONData] appendData:data];
}
现在一切都按预期工作了。这是我第二次遇到这个错误。我想我一直希望调试器能够把它拿起来。感谢每个人的时间和帮助。