1

我正在为 iOS 使用 SBJson 框架(也称为 json 框架)。

解析某个 JSON 文件时,我收到以下错误: -JSONValue failed。错误是:未转义的控制字符 [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 显示计数为 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

我猜您的文件包含一个未编码的选项卡(ascii 0x09),应该\t根据json语法替换它。

于 2011-08-06T11:06:57.543 回答
2

看看http://www.json.org/有一些字符需要转义才能被 JSON 正确解析。这就是原因。该文件不是正确的 JSON。

于 2011-08-06T11:04:19.197 回答
0

如果您的文件有 '\n' 或 '\r' 类型的 html qoutes,那么它可能会导致 obj-c 中的错误。你可以加 :

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

我遇到了同样的问题并使用它解决了。

于 2013-04-15T08:51:19.837 回答