JSON解析错误

时间:2011-08-06 11:00:34

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

我正在为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 个答案:

答案 0 :(得分: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];

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

我遇到了同样的问题,并解决了这个问题。