字符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",
检查你的服务器。