2013-06-17 3 views
8

테스트를 마친 후 으로 이미 구문 분석 한 JSON 데이터에 대해서만 [NSJSONSerialization isValidJSONObject:]을 반환하면 긍정적 인 결과를 얻을 수 있습니다. official documentation 따르면 isValidJSONObject가 예상대로 작동하지 않습니다.

:

주어진 객체 JSON 데이터로 변환 수 있는지 여부를 나타내는 부울 값을 반환 isValidJSONObject

.

그러나,있는 NSDictionary에 내가 JSON 변환을 시도하고있는 물체가 잘 변환하는 것이 사실에도 불구하고, isValidJSONObject 반환 NO.

data is not JSON 
dict is JSON 

다음이 시점에서 거대한 NSMutableDictionary 객체 인 DICT의 출력 :

NSURL * url=[NSURL URLWithString:urlString]; 
NSData * data=[NSData dataWithContentsOfURL:url]; 
NSError * error=[[NSError alloc] init]; 
NSMutableDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

if([NSJSONSerialization isValidJSONObject:data]){ 
    NSLog(@"data is JSON"); 
}else{ 
    NSLog(@"data is not JSON"); 
} 

if([NSJSONSerialization isValidJSONObject:dict]){ 
    NSLog(@"dict is JSON"); 
}else{ 
    NSLog(@"dict is not JSON"); 
} 

NSLog(@"%@",dict); 

내 로그에는 다음이 포함

여기 내 코드입니다. 이 코드를 실행할 때 오류가 발생하지 않지만 data에서 실행하면 isValidJSONObject이 잘못된 값을 반환하는 것으로 보입니다.

isValidJSONObject을 어떻게 예상대로 작동시킬 수 있습니까?

+0

이것은 낭비입니다 :'dict = [[NSMutableDictionary alloc] init]; ' –

+0

@HotLicks 제가 어떻게 그 제안을하셨습니까? – Jimmery

+0

좋아, 그 라인을 제거합니다. 조언 해주셔서 감사합니다. – Jimmery

답변

23

isValidJSONObject 테스트는 JSON 객체 (NSDictionary 또는 NSArray A)는 성공적 가 JSON 데이터로 변환 할 수있는 경우.

NSData 개체에 유효한 JSON 데이터이 포함되어 있는지 테스트 할 수 없습니다. 유효 JSON 데이터를 테스트하기 위해 당신은

[NSJSONSerialization JSONObjectWithData:data ...] 

를 호출하고 반환 값이 nil인지 아닌지 확인한다.

+1

아, 좋아, 평소처럼 내가 잘못하고 있었어! :) 응답 주셔서 감사합니다. – Jimmery

+2

이 시도했지만 데이터가 유효한 json 아닌 경우 JSONObjectWithData 충돌합니다. – LuisEspinoza

+2

@LuisEspinoza : 제 경험상 JSONObjectWithData는 데이터가 유효한 JSON이 아닌 경우 nil을 반환하고 오류 매개 변수를 설정합니다. –

관련 문제