JSON Parse Error

2019-02-28 14:17发布

I am using SBJson framework (also known as json-framework) for the iOS.

When parsing a certain JSON file, I am getting the following error: -JSONValue failed. Error is: Unescaped control character [0x09]'

I have used this framework many times and I am also parsing a very similar JSON file (that is even much longer) in that same app and it's working fine.

I tried throwing around a bunch of NSLogs and everything seems to be fine. Can someone please point me to what this error means, or at least how to go ahead in debugging such an error?

Here is the code that displays the error:

- (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 is showing a count of 0. The error is at the [jsonString JSONValue] line.

Thank you

4条回答
三岁会撩人
2楼-- · 2019-02-28 14:24

Have a look at http://www.json.org/ There are some characters that need to be escaped to be properly parsed by JSON. This is the cause. The file is not proper JSON.

查看更多
地球回转人心会变
3楼-- · 2019-02-28 14:25

I guess your file contain an unencoded tab (ascii 0x09) that should be replaced with \t according to the json grammar.

查看更多
SAY GOODBYE
4楼-- · 2019-02-28 14:28

If your file is having '\n' or '\r' kind of html qoutes then it may cause error in obj-c. You can add :

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

I was having same problem and solved using this.

查看更多
ゆ 、 Hurt°
5楼-- · 2019-02-28 14:29

I have a great solution for it. Apply this method for remove escaped characters.

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

Call this method with passing your output string like this

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

output = [self removeUnescapedCharacter:output];
查看更多
登录 后发表回答