Экранирование строк JavaScript и JSON
Инструмент превращает обычный текст в строку для кода: экранирует кавычки, переводы строк и обратную косую черту, по желанию записывает кириллицу и эмодзи кодами \uXXXX. Обратное действие возвращает текст из строки, скопированной из кода, JSON или лога, и показывает место ошибки, если строка записана неверно. Пригодится, чтобы вставить текст или путь Windows в код, собрать JSON вручную или прочитать сообщение вида "\u041E\u0448\u0438\u0431\u043A\u0430".
Как пользоваться
Выберите формат и вставьте текст — строка появится справа. «В кавычках» добавляет кавычки формата вокруг результата; выключите, если вставляете текст внутрь готовой строки. «Не-ASCII как \uXXXX» нужен для файлов и систем, которые не принимают UTF-8.
В режиме «Вернуть текст» строку можно вставить с кавычками или без. Для JavaScript вид кавычек определяется сам, для JSON проверяются строгие правила формата. При смене действия результат переносится во ввод. Текст обрабатывается в браузере и не отправляется на сервер; код из строки не выполняется.
Текст
Он сказал: "Привет!" Путь: C:\Users\Анна Итого: 5 ₽ 😀
Строка
Для экранирования включите JavaScript. Пример: текст Он сказал: "Да" в строке JSON записывается как"Он сказал: \"Да\"", перевод строки — как \n.
Что экранируется
\",\',\`— кавычка того же вида, что ограничивает строку. Остальные кавычки внутри экранировать не нужно.\\— сама обратная косая черта. ПутьC:\Usersв строке записывается как"C:\\Users", иначе\Uпрочитается как последовательность.\n,\t,\r— перевод строки, табуляция, возврат каретки. В обычной строке настоящий перевод строки — синтаксическая ошибка.\uXXXX— любой символ по коду. В JavaScript есть и\u{1F600}для эмодзи, и короткое\x41.
Чем JSON строже JavaScript
Строка JSON — только в двойных кавычках. Допустимы лишь \" \\ \/ \b \f \n \r \t и \uXXXX: записи \x41, \u{1F600} и \' работают в JavaScript, но JSON.parse() на них выдаст ошибку. Эмодзи в JSON кодируется двумя \u — суррогатной парой: "\uD83D\uDE00".
JSON.stringify('Он сказал: "Да"\n') // '"Он сказал: \\"Да\\"\\n"'
JSON.parse('"\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442"') // 'Привет'Собирая JSON в коде, не склеивайте строки вручную — JSON.stringify() сам экранирует всё нужное.
Шаблонные строки
В строке в обратных кавычках переводы строк допустимы как есть, а ${…} подставляет значение выражения. Чтобы ${ осталось текстом, его записывают как \${ — инструмент делает это сам и не выполняет подстановки при разборе, а сообщает о них. Если обратные косые черты должны остаться буквально, например в регулярном выражении или пути, используйте String.raw`C:\Users`.
Вопросы и ответы
Почему JSON.parse пишет Unexpected token?
Чаще всего в строке остался настоящий перевод строки или табуляция, одинарные кавычки вместо двойных или последовательность из JavaScript вроде \x41. Вставьте строку в режиме «Вернуть текст» с форматом JSON — инструмент покажет место ошибки.
Зачем экранировать \u2028?
Символы-разделители строк Юникода U+2028 и U+2029 до ES2019 считались переводом строки и ломали строку в JavaScript, хотя в JSON допустимы. Старые браузеры и сборщики ещё встречаются, поэтому инструмент записывает их кодом.
Нужно ли экранировать косую черту /?
Нет. JSON разрешает \/, и некоторые библиотеки так пишут, чтобы строка не закрыла </script> внутри HTML. Значение строки от этого не меняется.
Связанные инструменты
Текст для вставки в разметку экранирует «Экранирование HTML», для адресов — «URL-кодирование». Проверить JSON целиком поможет «JSON форматтер».