Ошибка синтаксического анализа JSON - PullRequest
1 голос
/ 06 августа 2011

Я использую фреймворк SBJson (также известный как json-framework) для iOS.

При анализе определенного файла 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].

Спасибо

Ответы [ 4 ]

8 голосов
/ 06 декабря 2012

У меня есть отличное решение для этого.Примените этот метод для удаления экранированных символов.

-(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];
3 голосов
/ 06 августа 2011

Я полагаю, ваш файл содержит некодированную вкладку (ascii 0x09), которую следует заменить на \t в соответствии с грамматикой json .

2 голосов
/ 06 августа 2011

Посмотрите на http://www.json.org/ Есть некоторые символы, которые должны быть экранированы для правильного анализа в JSON.Это причина.Файл неверный JSON.

0 голосов
/ 15 апреля 2013

Если в вашем файле есть html-квоты типа '\ n' или '\ r', это может привести к ошибке в obj-c. Вы можете добавить:

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

У меня была такая же проблема, и я решил ее.

...