2011-08-06 21 views
1

私は、iOSのSBJsonフレームワーク(json-frameworkとも呼ばれます)を使用しています。JSON解析エラー

特定のJSONファイルを解析すると、次のエラーが発生します。 -JSONValueが失敗しました。エラー:Unescaped control character [0x09] '

私はこのフレームワークを何度も使用しており、同じアプリケーションで非常に似たJSONファイル(それはずっと長い)を解析しています。

私はNSLogsの束を投げてみましたが、すべてがうまくいくようです。誰かがこのエラーが何を意味するのか、少なくともそのようなエラーをデバッグするにはどうすればいいのかを教えてください。

- (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

ありがとうはhttp://www.json.org/適切にJSONによって解析されるようにエスケープする必要があるいくつかの文字がありますを見てください。これが原因です。このファイルは適切なJSONではありません。

8

私はそれに最適なソリューションを持っています。エスケープ文字を削除するには、このメソッドを適用します。あなたのファイルは「\ n」はまたはHTML qoutesの「\ r」が種類を持っている場合、それは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

のようなあなたの出力文字列を渡すと

-(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; 
} 

コールこの方法c。 あなたが追加することができます:私は同じ問題を持っていたし、これを使用して解決

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