1

iOS 用の SBJson フレームワーク (json-framework とも呼ばれます) を使用しています。

特定の JSON ファイルを解析すると、次のエラーが発生します: -JSONValue に失敗しました。エラー: エスケープされていない制御文字 [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 はカウント 0 を示しています。エラーは[jsonString JSONValue]行にあります。

ありがとうございました

4

4 に答える 4

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

このように出力文字列を渡してこのメ​​ソッドを呼び出します

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

output = [self removeUnescapedCharacter:output];
于 2012-12-06T10:30:01.620 に答える
3

あなたのファイルには、 json文法に従って0x09置き換える必要があるエンコードされていないタブ ( ascii ) が含まれていると思います。\t

于 2011-08-06T11:06:57.543 に答える
2

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

于 2011-08-06T11:04:19.197 に答える
0

ファイルに '\n' または '\r' 種類の html クォートがある場合、obj-c でエラーが発生する可能性があります。あなたは付け加えられます :

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

私は同じ問題を抱えていて、これを使って解決しました。

于 2013-04-15T08:51:19.837 に答える