【问题标题】:JSON Parse ErrorJSON 解析错误
【发布时间】:2011-08-06 11:00:34
【问题描述】:

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

解析某个 JSON 文件时,我收到以下错误: -JSONValue 失败。错误是:未转义的控制字符 [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] 行。

谢谢

【问题讨论】:

    标签: iphone objective-c ios json-framework sbjson


    【解决方案1】:

    我有一个很好的解决方案。应用此方法删除转义字符。

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

    【讨论】:

    • 请编辑您的答案并格式化代码以使其可读。
    • 没有。正确的解决方案是修复无效 JSON 的来源,而不是像这样的 hack 解决它。
    • 但是对于有效的 JSON,我们可以在 PHP 和 I-Phone 端修复它,以便更安全地解析 JSON。
    • 我只是用它来解决我的问题。我怎么知道是哪个角色导致了这个问题?因为直到几天前它都运行良好。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-28
          • 2017-04-12
          相关资源
          最近更新 更多