iPhone无法解析YELP的JSON结果

时间:2011-03-07 23:09:30

标签: iphone json touchjson

我正在尝试从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。在这一点上,我一直在键盘上敲了几个小时,非常感谢任何输入。

JSON sample

更新

我是个假人。我没有初始化JSONData。请接受我的浪费时间的道歉并感谢您的建议。

2 个答案:

答案 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];
}

现在一切都按预期工作了。这是我第二次遇到这个错误。我想我一直希望调试器能够把它拿起来。感谢每个人的时间和帮助。