Я должен сформировать строку JSON, в которой значение имеет символ новой строки. Это должно быть экранировано, а затем опубликовано с помощью вызова AJAX. Может ли кто-нибудь предложить способ избежать строки с помощью JavaScript. Я не использую jQuery.
javascript
escaping
Srikant
источник
источник
Ответы:
Возьми свой JSON и
.stringify()
все. Затем используйте.replace()
метод и заменить все вхождения\n
с\\n
.РЕДАКТИРОВАТЬ:
Насколько я знаю, нет известных библиотек JS для экранирования всех специальных символов в строке. Но вы можете связать
.replace()
метод и заменить все специальные символы следующим образом:Но это довольно неприятно, не так ли? Введите всю прелесть функций в том, что они позволяют разбивать код на части и поддерживать чистоту основного потока вашего сценария без 8 цепочек
.replace()
вызовов. Итак, давайте поместим эту функциональность в функцию с именемescapeSpecialChars()
. Давайте идти вперед и прикрепить его кprototype chain
изString
объекта, таким образом , мы можем назватьescapeSpecialChars()
непосредственно на объекты типа String.Вот так:
После того как мы определили эту функцию, основная часть нашего кода выглядит так просто:
источник
Согласно предложенному пользователю 667073, за исключением изменения порядка замены обратной косой черты и исправления замены кавычек
источник
Line separator
\u2028
иParagraph separator
\u2029
. Ссылка: es5.github.io/#x7.3Uncaught SyntaxError: Unexpected token \ in JSON at position 2
Как и вы, я просматривал несколько комментариев и публикацию, чтобы заменить специальные escape-символы в моем JSON, который содержит html-объект внутри.
Мой объект состоит в том, чтобы удалить специальные символы в объекте JSON, а также отобразить html, который находится внутри объекта json.
Вот что я сделал и надеюсь, что его очень просто использовать.
Сначала я сделал JSON.stringify мой объект json и JSON.parse результат.
Например:
И это решает мою проблему и сделано с использованием чистого Javascript.
источник
stackoverflow
ошибкойJSON.parse(JSON.stringify($("body")))
в HTML-файл с телом и несколько таблиц. $ ("body") является объектом javascript, но stringify не сможет его проанализировать.Боюсь сказать, что ответ, данный Алексом, мягко говоря, неверен:
Эта функция
кажется, лучшее приближение.
источник
Небольшое обновление для одиночных кавычек
источник
это старый пост но это все еще может быть полезно для тех, кто использует angular.fromJson и JSON.stringify. escape () устарела. используйте это вместо этого,
ссылка http://www.w3schools.com/jsref/jsref_decodeuricomponent.asp
источник
Существует также второй параметр в JSON.stringify. Итак, более элегантным решением будет:
источник
Это старый вопрос, но решение не помогло мне, так как не помогло решить все вопросы. Я наконец нашел ответ, который сделал работу здесь
Я опубликую свое комбинированное решение как с использованием escape, так и кодирования компонента uri:
источник
escape = (string) -> JSON.stringify(string)[1...-1]
Лучше использовать
JSON.parse(yourUnescapedJson);
источник
Используйте json_encode (), если ваш язык сценариев на стороне сервера - PHP,
json_encode()
экранирует символ новой строки и другие неожиданные для вас токены (если вы не используете PHP, найдите аналогичную функцию для вашего языка сценариев)тогда используйте
$.parseJSON()
в своем JavaScript, готово!источник
<script> windows.data_from_php = <?php echo json_encode(json_encode($arrayOrObjToJs)); ?>; var phpData = JSON.parse(windows.data_from_php); </script>
php JSON.parse двойное кодированиеЯ попал в ту же ситуацию во время одного из моих вызовов Ajax, когда
JSON
выдает ошибку из-за новой строки в поле Textarea. Приведенное здесь решение не сработало для меня. Поэтому я использовал.escape
функцию Javascript, и она работала нормально. Затем, чтобы получить значениеJSON
, я просто удалился с помощью.unescape
.источник
Я использовал встроенный jQuery.serialize () для извлечения значения из текстовой области, чтобы urlencode ввода. Профессиональная часть заключается в том, что вам не нужно искать заменять каждый специальный символ самостоятельно, а я также сохраняю переводы строк и экранирование html. Чтобы сериализация работала, кажется, что поле ввода должно иметь атрибут name, но оно также добавляет тот же атрибут к экранированной строке, которую необходимо заменить. Может быть не то, что вы ищете, но это работает для меня.
источник
При использовании любой формы Ajax в Интернете, похоже, отсутствует подробная документация для формата ответов, полученных от сервера CGI. Некоторые записи здесь указывают на то, что переводы строки в возвращаемом тексте или данных JSON должны быть экранированы, чтобы предотвратить бесконечные циклы (зависания) при преобразовании JSON (возможно, созданное с помощью исключения uncaught), независимо от того, выполняется ли это автоматически с помощью jQuery или вручную с использованием системы Javascript или синтаксического анализа JSON библиотеки звонки.
В каждом случае, когда программисты публикуют эту проблему, предоставляются неадекватные решения (чаще всего заменяя \ n на \\ n на стороне отправителя), и вопрос упускается. Их неадекватность проявляется при передаче строковых значений, которые случайно встраивают управляющие управляющие последовательности, такие как пути Windows. Примером является «C: \ Chris \ Roberts.php», который содержит управляющие символы ^ c и ^ r, которые могут вызвать преобразование JSON строки {"file": "C: \ Chris \ Roberts.php"} в цикл навсегда. Одним из способов получения таких значений является намеренная попытка передачи предупреждений и сообщений об ошибках PHP с сервера на клиент, разумная идея.
По определению, Ajax использует HTTP-соединения за кулисами. Такие соединения передают данные с использованием GET и POST, оба из которых требуют кодирования отправленных данных, чтобы избежать неправильного синтаксиса, включая управляющие символы.
Это дает достаточно подсказки для построения того, что кажется решением (требуется дополнительное тестирование): использовать rawurlencode на стороне PHP (отправляющий) для кодирования данных и unescape на стороне Javascript (принимающий) для декодирования данных. В некоторых случаях вы будете применять их ко всем текстовым строкам, в других случаях вы будете применять их только к значениям внутри JSON.
Если эта идея окажется верной, можно построить простые примеры, чтобы помочь программистам на всех уровнях решить эту проблему раз и навсегда.
источник
Похоже, это действительно древний пост :-) Но, ребята, лучший способ обойти это, чтобы на 100% работать без сложного кода, это использовать обе функции кодирования / декодирования для base64. Это atob () и btoa (). Безусловно, самый простой и лучший способ, не нужно беспокоиться, если вы пропустили какие-либо символы, которые нужно экранировать.
Джордж
источник
Если ваши Googles продолжают высадить вас здесь, и ваш API выдает ошибки, если ваши двойные кавычки JSON не экранированы (
"{\"foo\": true}"
), все, что вам нужно сделать, - это дважды преобразовать строкуJSON.stringify(JSON.stringify(bar))
источник
Используйте encodeURIComponent () для кодирования строки.
Например. var myEscapedJSONString = encodeURIComponent (JSON.stringify (myJSON));
Вам не нужно декодировать его, так как веб-сервер автоматически делает то же самое.
источник
Никогда не используйте регулярные выражения (я имею в виду, как никогда). Лучший и эффективный способ:
источник