«Uncaught SyntaxError: неожиданный токен?» В JSON.parse () и $ .parseJSON ()

0

Я понятия не имею, почему я получаю это, и я потратил на день попытку испортить код. Теперь самое простое, что я могу получить (это попытка создания массива javascript с экранированной строкой, поступающей из базы данных):

vat test = '["<script>var bob = \\"This is ok\\"</script>", "<script>search.replace(/!|\\\?)/g, \\"\\")</script>"]';

Все идет нормально.

Затем это прерывает и возвращает ошибку:

JSON.parse(test);

Чтобы дать представление, исходными 2 элементами массива были следующие:

<script>var bob = "This is ok"</script>
<script>search.replace(/!|\?)/g, "")</script>

Все коды любого типа, которые были введены в базу данных, всегда работали, за исключением теперь, из-за этого вопросительного знака из введенной пользователем строки в моей CMS. Если я удалю его или заменим вопросительный знак чем-нибудь другим, он будет работать.

Я не могу изменить регулярное выражение так, чтобы оно работало каким-либо другим способом, но я не тот, кто вошел в это. Плюс это упрощенная версия целого скрипта, я просто сузил ее до вопросительного знака.

Я также посмотрел онлайн, если знак вопроса имел особое значение для json, ничего не нашел.

Хотелось бы, чтобы я отправил скрипку вместо кода, но jsfiddle не позволяет добавить тег в окне javascript.

  • 0
    Я считаю, что это может вызвать проблемы, но не вопросительный знак
  • 0
    Зачем тебе это нужно? Похоже, проблема XY ...
Теги:

1 ответ

0
Лучший ответ
JSON.parse('["<script>var bob = \\"This is ok\\"</script>", "<script>search.replace(/!|\\\?)/g, \\"\\")</script>"]')
SyntaxError: Unexpected token ?

Здесь есть два unescapes, поэтому вам нужно дополнительное \ перед тем ?

JSON.parse('["<script>var bob = \\"This is ok\\"</script>", "<script>search.replace(/!|\\\\?)/g, \\"\\")</script>"]')
["<script>var bob = "This is ok"</script>", "<script>search.replace(/!|\?)/g, "")</script>"]
  • 0
    Черт! Поскольку я пытался это исправить, я не пытался редактировать проблему в источнике! Почти там я не могу отредактировать введенную пользователем строку, а также не могу изменить способ экранирования в базе данных. Однако я могу добавить дополнительную «замену», например, такую: test.replace ('\\\', '\\\\'). Но мне нужно избегать обратной косой черты, которую я заменяю, поэтому я попробовал test.replace ('\\\\\\', '\\\\') и test.replace ('\\\\\\' , '\\\\\\\\'), но не работает. Это ужасно, я знаю, но я рядом, благодаря тебе!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню