1

我正在尝试从 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);
}

我得到:连接完成加载:错误域=CJSONDeserializerErrorDomain Code=-11“操作无法完成。(CJSONDeserializerErrorDomain 错误-11。)”

我从 SBJSON 切换到 TouchJSON,因为我也无法从该框架中提取它。我尝试将其加载到字典和数组中,结果为 null。在这一点上,我已经在键盘上敲了几个小时,非常感谢任何输入。

JSON 示例

更新:

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

4

2 回答 2

1

SBJSON 是一个相当不错且广为人知的解析器。如果它没有解析您的输入,您可能会认为这是因为输入确实很糟糕。如果 TouchJSON 也没有解析它,那么输入肯定是错误的。JSONData因此,您的对象发生了一些不可靠的事情。

我建议您在connectionDidFinishLoading方法中将 JSON 数据打印到控制台并尝试重新验证它。查看您传递给 CJSON 的数据对象中的实际内容。

于 2011-03-08T01:32:17.770 回答
0

呃,在进一步审查了应用程序之后,我似乎急于将我的示例复制到这个项目中并且忘记了初始化 JSONData:

self.JSONData = [[[NSMutableData alloc] init]autorelease];

然后我更新了我的 didReceiveData 方法:

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [[self JSONData] appendData:data];
}

现在一切都按预期工作。这是我第二次遇到这个错误。我想我一直希望调试器能够接受它。感谢大家的时间和帮助。

于 2011-03-22T22:00:33.497 回答