이 문제에 대해 많은 Q/A를 읽었지만 내 상황에 맞는 대답을 찾을 수 없습니다.NSJSONSerialization을 사용하여 JSON 구문 분석하기 : 오류 3840 - 데이터가 손상 되었습니까?
PHP에서 작성한 REST 서비스에서 JSON 응답을 검색합니다. 이건 내 코드입니다 : 내가 브라우저에서 REST 호출을 호출 할 때, 나는 동일 다음과 같은 반응을 보인다 참조
NSURLResponse *response = nil;
NSError *theError1 = nil;
NSError *theError2 = nil;
NSURL *webServiceUrl = [NSURL URLWithString:@"http://..."];
NSURLRequest *request = [NSURLRequest requestWithURL:webServiceUrl cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
NSData *theData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&theError1];
NSString *dataString = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataString);
id json = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingAllowFragments | NSJSONReadingMutableContainers error:&theError2];
if (theError2 != nil)
NSLog(@"%@", theError2);
어떻게 엑스 코드 로그 :
{
"Name": "REST Service",
"Product": "REST Test",
"Version": "1.0.0.0",
"Copyright": "2013 Test Company"
}
나는 위의 코드를 실행하지만 다음 오류가 만들어지고 기록됩니다.
오류 도메인 = NSCocoaErrorDomain 코드 = 3840 "손상 되었기 때문에 데이터를 읽을 수 없습니다." (문자 3의 값이 잘못되었습니다.) UserInfo = 0x100547430 {NSDebugDescription = 문자 3의 값이 잘못되었습니다.}}
내가 뭘 잘못하고 있니?
대신'dataString'을 로깅하는 대신'theData'를 로깅하십시오. 그것은 당신에게 문제를 디버깅하는 데 더 유용해야 바이트 순서를 보여줍니다. 또한 오류를 올바르게 검사하지 않는다는 것을 알아 두십시오. 오류를 검사하기 전에 반환 값이'nil'인지 테스트해야합니다. –
디버깅 할 때'json'의 주소가'0x0000 ... '인 것을 보았 기 때문에 실제로 그 부분을 남겼습니다. 집에서 일할 때 더 자세한 바이트 시퀀스를 분석하겠습니다. –
오케이. 난 그냥 JSON 문자열을 테스트하고 거기에'NSLog()'또는 NSString' 변환이 숨어있는 재미있는 문자가 없다면 작동합니다. –