字符0,NSJSONSerialization周围的值无效

我从我的服务器得到一个有效的回应:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // Append the new data to the instance variable you declared //[_responseData appendData:data]; NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",responseBody); if(data != NULL) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { NSError *error = nil; //NSMutableArray *jsonArray = [[CJSONDeserializer deserializer] deserializeAsArray:[responseBody dataUsingEncoding:NSUTF8StringEncoding] error:&error]; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; if (error) { NSLog(@"JSONObjectWithData error: %@", error); [delegate onErrorGetArrayFromServer]; } else [self parseJSON:jsonArray]; }); } else { if([delegate respondsToSelector:@selector(onErrorGetArrayFromServer)]) { [delegate onErrorGetArrayFromServer]; } } } 

答复如下所示:

  [{"id":"37", "id_estado":"1", "id_categoria":"1", "nombre":"fer", "email":"asd@gmail.com", "fecha":"2014-07-16 11:25:00", "observaciones":"as dasd asdasd sasd", "latitud":"37.619636", "longitud":"-4.318449", "foto":"images\/default.jpg"}, {"id":"36", "id_estado":"1", "id_categoria":"6", "nombre":"Fernando", "email":"", "fecha":"2014-07-16 10:32:45", "observaciones":"que", "latitud":"37.6178690439634", "longitud":"-4.3238141387701", "foto":"images\/default.jpg"}] 

它给我的错误:

 JSONObjectWithData error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x9e0f610 {NSDebugDescription=Invalid value around character 0.} 

我试图与其他库( CJSON ),它给我的错误:

 JSONObjectWithData error: Error Domain=kJSONScannerErrorDomain Code=-202 "Could not scan array. Could not scan a value." UserInfo=0xa15c0e0 {snippet=!HERE>![{"id":"37","id_esta, location=0, NSLocalizedDescription=Could not scan array. Could not scan a value., character=0, line=0} 

我的服务器是一个REST服务器,对于我的Android应用程序效果很好。


_解决了_

感谢@Himanshu Joshi:

为什么要parsingdidReceiveData中的数据:? 数据没有完全下载,你必须在那里附加数据。 parsingconnectionDidFinishLoading中的数据:委托方法 –

我parsing了connectionDidFinishLoading:的数据connectionDidFinishLoading:一切都很顺利。

我遇到了同样的问题,但这是因为我的初始URL不正确。

在parsingJSON之前需要检查响应。 它可能会告诉你,它没有被发现。

在这一点上,数据实际上可以包含一个404 HTML页面。

我使用这些方法来debugging这个,更简单的方法来处理Web请求:

 // Asynchronous fetch the JSON and call the block when done NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; if ([httpResponse statusCode]!=200) { // log [response description] // log [NSString stringWithUTF8String:[data bytes]] return; } NSDictionary* jsonDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; if (!jsonDic) { return; } // process the JSON }]; [downloadTask resume]; 

你的JSON在数据之前有空格:

  [{"id":"37", 

检查你的服务器。