2012-09-14 1 views
1

원격 웹 서비스에서 JSON 데이터를 읽어야하는 앱을 작성 중입니다. URL은 "something.action"형식입니다.null을 반환하는 NSJSONSerialization

나는 서비스에서 JSOn 데이터를 다운로드하기 위해 dataWithContentsofURL을 사용하는데이 함수가 일부 데이터를 반환한다는 것을 알았습니다.

이 데이터를 사용하여 NSJSONSeraiization 함수를 호출했지만이 응답은 null입니다.

기본적으로 http://www.raywenderlich.com/5492/working-with-json-in-ios-5에 제공된 코드를 사용하고 있습니다. 유일한 차이점은 원격 서버에서 데이터를 가져 오는 것이고 URL의 형식은 "something.action"입니다.

여기서 어떤 문제가 있는지 알 수 없습니다.

+1

반환 된 데이터가 어떤 모양입니까? 문자열로 해석하면 ([[[NSString alloc] initWithData : yourData encoding : NSUTF8StringEncoding] autorelease)') JSON처럼 보입니까? – AliSoftware

+0

dataWithContentsofURL을 사용하여 생성 된 변수 데이터는 일부 16 진수 값을 반환하지만 위 설명에서 사용자가 지정한 명령을 사용하면 Null이 반환됩니다. 여기에 무슨 일이 일어날 지 아무 단서가 있습니까? – user1534235

+0

사용 된 인코딩이 잘못되었습니다. 받은 데이터는 UTF8 인코딩이 아닌 다른 인코딩 (아마도 웹 서비스 개발자 나 서비스 의사에게 사용 된 인코딩을 확인해야합니다) – AliSoftware

답변

1

http://jsonviewer.stack.hu/과 같은 JSON 뷰어를 검사하여 반환 된 JSON이 올바른지 확인하십시오.

수신 한 NSData에서 가져온 문자열의 NSLog를 수행하고 뷰어와 함께 사용하십시오. 문제가 있으면 객체가 직렬화되지 않은 이유를 알 수 있습니다.

+0

내가 얻는 데이터가 아닙니다. 적절한 형식, 그것은 6d70616e와 같은 임의의 문자열입니다. 1. 데이터는 dataWithContentsOfURL 함수를 사용하여 NSDATA에서 얻은 것입니다. 이 함수의 클래스는 NSConcreteData로 표시됩니다. 2. NSJSONSerialization을 사용하여 데이터의 클래스가 null이되었습니다. ( – user1534235

+0

NSData를 문자열로 변환하고 응답이 무엇인지 확인할 수 있습니까? – lostInTransit

0

확인 당신이 얻을 응답은 올바른 형식의 JSON 파일은 그것의 클래스를 확인하는 경우입니다 :

NSError *jsonError = nil; 
NSJSONSerialization *myJSONObject = [NSJSONSerialization JSONObjectWithData:theNSDataObained options:NSJSONReadingMutableContainers error:&jsonError]; 

if(jsonError != nil){ 
    NSLog(@"JSON Error: %@", jsonError); 
    return; 
} 

//An NSJSONSerialization object will either be an NSDictionary or 
//an NSArray, figure out what it is: 

NSLog(@"JSON class is: %@", [myJSONObject class]); 

//if it's a NSDictionary: 
if([myJSONObject isKindOfClass:[NSDictionary class]]){ 
    NSDictionary *myJSONDictionary = (NSDictionary *) myJSONObject; 
    for(id key in myJSONDictionary){ 
     id value = [myJSONDictionary valueForKey:key]; 
     [value doStuff]; 
    } 
} 
else //if it's a NSArray.... 
+0

'theNSDataObtained '가 NSConcreteData로 나타나고 myJSONObject가 null로 표시됩니다 . 한 가지 더 (문제가되는 경우) ... 인터넷 링크를 사용하여 데이터를 다운로드하고 표시하려고하면 제대로 표시됩니다. 그러나 제 경우에는 데이터를 내부 엔터프라이즈 서버에서 사용할 수 있습니다. – user1534235