JSON-анализатор JavaScript, который сообщает об ошибке - PullRequest
4 голосов
/ 19 августа 2011

У меня были некоторые проблемы с разбором JSON, полученного с WebSocket (оригинальный вопрос - При синтаксическом анализе JSON, полученном с WebSocket, выдается ошибка ). Сама строка JSON допустима (проверено с несколькими валидаторами JSON), но JSON.parse выдает исключение. Я пытаюсь выяснить, что именно он не может проанализировать, но единственное, что я получаю, - это «SyntaxError: непредвиденный_каталог ILLEGAL», в нем не указано, где находится точная позиция неисправного токена. Есть ли способ извлечь такую ​​информацию?

Обновление : если я скопирую и вставлю эту строку JSON в статический файл (например, «data.json»), а затем получу ее и проанализирую с помощью той же функции (JSON.parse) - тогда она работает отлично. Поэтому я предполагаю, что происходит что-то хитрое, я подумал о символе новой строки (может быть, вместо \ r \ n или наоборот был \ n или наоборот), но полное удаление всех разрывов строк не помогло. Я думаю, что это может быть проблема кодирования, но данные принимаются через websocket и согласно документации это строка utf-8.

2-е обновление : это прекрасно работает, если я использую здесь "json_parse": https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js Тогда это работает отлично! Означает ли это, что это ошибка в реализации "JSON.parse", используемой Chrome, или что?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 августа 2011

Вы можете скопировать реализацию JSON.parse () откуда-то (например, из jQuery), изменить ее имя, чтобы вы могли вызывать ее напрямую, настроить реализацию так, чтобы она никогда не обнаруживала встроенный синтаксический анализатор, поэтому он всегда использует анализатор JS, а затем измените код для использования новой версии анализатора JS, затем проследите его в отладчике javascript, пока не найдете то, что ему не нравится.

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

Необходимо проверить, есть ли в вашей строке JSON кавычки и косые черты.Если да, их необходимо экранировать:

{
    "key": "i've \"quotes\" in me",
    "key2": "and \\slashes too"
}

Кроме того, JSONLint дает точное местоположение ошибки.

Согласно JSON.org, в строках не должно быть кавычек и косой черты, поэтому вам нужно их избегать.

enter image description here

1 голос
/ 19 августа 2011

Я думаю, вам не нужно вызывать JSON.parse:

JSON.parse({"key": "whatever"}) // Syntax Error ILLEGAL

потому что это уже объект. Мне также было бы любопытно увидеть результат следующего кода:

eval("(" + json + ")");

или

JSON.parse(decodeURIComponent(json));
0 голосов
/ 19 августа 2011

Не могу много рассказать о деталях, но возможно, что ваш валидатор выполняет не строгий анализ, а ваш javascript может выполнять строгий анализ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...