2011-08-06 9 views
1

iOS 용 SBJson 프레임 워크 (json-framework라고도 함)를 사용하고 있습니다.JSON 구문 분석 오류

특정 JSON 파일을 구문 분석 할 때 다음 오류가 발생합니다. -JSONValue가 실패했습니다. 오류 : Unescaped 제어 문자 [0x09] '

나는이 프레임 워크를 여러 번 사용하고 있으며 동일한 응용 프로그램에서 매우 유사한 JSON 파일을 파싱하고 있습니다.

많은 NSLog를 던져 보았는데 모든 것이 잘된 것처럼 보입니다. 누군가가이 오류가 의미하는 것을 가르쳐 주시겠습니까? 아니면 적어도 이러한 오류를 디버깅하는 방법을 가르쳐주십시오.

- (void)downloadSchedule:(NSString *)jsonString { 

    // Get JSON feed URL and instantiate a dictionary object with its content 
    NSDictionary *topDic = [jsonString JSONValue]; 

    NSLog(@"topDic count %d", [topDic count]); 

topDic가 오류가 [jsonString JSONValue] 줄은 0의 카운트를 도시한다 : 여기

오류를 표시하는 코드이다.

답변

3

파일에 json 문법에 따라 \t으로 대체되어야하는 인코딩되지 않은 탭 (ascii 0x09)이 포함되어 있다고 생각합니다.

2

가 제대로 JSON에 의해 ​​구문 분석 할 수 이스케이프 할 필요가 일부 문자가 있습니다 http://www.json.org/에서보세요 감사합니다. 이것이 원인입니다. 파일이 적절한 JSON이 아닙니다.

8

나는 그것을위한 훌륭한 해결책이있다. 이스케이프 된 문자를 제거하려면이 메서드를 적용하십시오.

-(NSString *)removeUnescapedCharacter:(NSString *)inputStr 
{ 

NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet]; 

NSRange range = [inputStr rangeOfCharacterFromSet:controlChars]; 

    if (range.location != NSNotFound) 
    { 

     NSMutableString *mutable = [NSMutableString stringWithString:inputStr]; 

     while (range.location != NSNotFound) 
     { 

      [mutable deleteCharactersInRange:range]; 

      range = [mutable rangeOfCharacterFromSet:controlChars]; 

     } 

     return mutable; 

    } 

    return inputStr; 
} 

전화 파일이 '\이 n'또는 '\ r'의 HTML qoutes의 종류는 다음이를 OBJ에서 오류가 발생할 수가있는 경우이

NSString *output = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"yourUrlString"] encoding:NSUTF8StringEncoding error:nil]; 

output = [self removeUnescapedCharacter:output]; 
+0

답변을 편집하고 코드를 읽을 수 있도록 포맷하십시오. – kleopatra

+0

아니요 올바른 해결 방법은 유효하지 않은 JSON 소스를 수정하는 것입니다. 이와 같은 해킹으로 해결할 수는 없습니다. –

+0

하지만 유효한 JSON의 경우 PHP 및 I-Phone 쪽에서 수정할 수 있으므로 JSON 구문 분석의 보안이 강화됩니다. – chandan

0

처럼 출력 문자열을 전달하는이 방법 기음. 당신은 추가 할 수 있습니다 : 나는 같은 문제가되었고, 이것을 사용하여 해결했다

[jsonString stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br />"]

.