Ошибка разбора библиотеки Stig JSON: как разместить новые строки в JSON? - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть какой-то xml, который возвращается из веб-службы.Я в свою очередь использую xslt, чтобы превратить этот xml в json (я превращаю чужой xml сервис в json-сервис).Мой сервис, который теперь выводит JSON, используется моим приложением для iphone, использующим де-факто структуру iphone json, SBJSON.

Проблема заключается в использовании дросселей метода [string JSONValue], и ​​я вижу, чтоиз-за разрывов строк.И вот, даже часто задаваемые вопросы говорят мне о проблеме, но я не знаю, как ее исправить.

Синтаксическому анализатору не удалось разобрать строку X

Вы уверены, что это законный JSON?Этот фреймворк очень строг, поэтому не будет принимать то, что (по-видимому) несколько валидаторов принимаетВ частности, буквенные символы TAB, NEWLINE или CARRIAGE RETURN (и все другие управляющие символы) в строковых токенах запрещены, но их очень трудно обнаружить.(Разумеется, эти символы допускаются между токенами.)

Если вы получите что-то похожее на приведенное ниже (число может отличаться), то в одной из ваших строк запрещены управляющие символы Unicode.

NSLocalizedDescription = "Неэкранированный управляющий символ '0x9'";

Я попытался использовать строку, например: NSString *myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

Но это не работает.Мой сервис XML не возвращается как CDATA.Насколько я могу судить, в xml есть разрыв строки (как бы я это подтвердил).Я просто хочу точно передать разрыв строки в JSON.

Я действительно потратил на это целый день, так что пришло время спросить.У меня больше нет гордости.Большое спасибо

Ответы [ 3 ]

0 голосов
/ 21 декабря 2011

Выход из новой строки должен работать. Так что следующая строка должна идеально работать. Просто проверьте, содержит ли ваш ввод также символ '\ r'.

 NSString *myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

Вы можете проверить, какой управляющий символ присутствует в строке, используя любой редактор, который поддерживает отображение всех символов (в том числе не отображаемых символов). например используя Блокнот ++ вы можете просматривать все символы, содержащиеся в строке.

0 голосов
/ 03 сентября 2012

Похоже, ваш XSLT не работает, потому что он не создает легальный JSON.Это неудивительно, поскольку создание правильно отформатированных строк JSON не совсем тривиально.Мне интересно, не проще ли использовать стандартную библиотеку XML для разбора XML на структуры данных, которые может использовать ваше приложение.

0 голосов
/ 22 сентября 2011

У меня нет решения для вас, но я обычно использую CJSONSerializer и CJSONDeserializer из проекта TouchJSON, и это довольно надежно, у меня никогда раньше не было проблем с переносами строк. Просто мысль.

http://code.google.com/p/touchcode/source/browse/TouchJSON/Source/JSON/CJSONDeserializer.m?r=6294fcb084a8f174e243a68ccfb7e2c519def219 http://code.google.com/p/touchcode/source/browse/TouchJSON/Source/JSON/CJSONSerializer.m?r=3f52118ae2ff60cc34e31dd36d92610c9dd6c306

...