ToolDeck

JSON String Escape

Экранирование и снятие экранирования специальных символов JSON в строках

Попробовать пример

Входные данные

Результат

Работает локально · Безопасно вставлять секреты
Результат появится здесь…

Что такое экранирование строк JSON?

Экранирование строк JSON — это процесс преобразования специальных символов внутри строки в escape-последовательности, которые JSON-парсеры могут прочитать без нарушения структуры. Спецификация JSON (ECMA-404 / RFC 8259) требует, чтобы определённые символы внутри строковых значений предварялись обратным слешем. Без правильного экранирования буквальная двойная кавычка или перевод строки внутри строки прерывали бы её досрочно и вызывали ошибку разбора.

Каждая строка JSON ограничена двойными кавычками. Когда сама строка содержит двойную кавычку, обратный слеш или управляющий символ (U+0000 — U+001F), символ должен быть заменён его escape-последовательностью. Например, буквальный перевод строки становится \n, табуляция — \t, а двойная кавычка — \". Любую кодовую точку Unicode можно также представить как \uXXXX, где XXXX — четырёхзначное шестнадцатеричное значение.

Снятие экранирования (обратная операция) преобразует эти последовательности с обратным слешем обратно в исходные символы. Используйте её, когда получаете JSON-данные, где строковые значения дважды экранированы, или когда нужно извлечь сырой текст из записи JSON-лога для отображения в UI или терминале. Конвейеры агрегации логов сталкиваются с этим постоянно: когда JSON-сообщение хранится как строковое значение внутри другого JSON-документа, каждый обратный слеш во внутренней строке приходит удвоенным.

Зачем использовать инструмент JSON Escape?

Добавлять или удалять обратные слеши вручную — утомительно и чревато ошибками, особенно при работе с многострочным текстом, путями к файлам или встроенными фрагментами кода. Специализированный инструмент экранирования улавливает крайние случаи, которые ручное редактирование пропускает.

🔒
Приватность прежде всего
Ваши строки никогда не покидают браузер. Всё экранирование и снятие экранирования выполняется локально в JavaScript без обращений к серверу, поэтому конфиденциальные данные — API-ключи, токены — остаются на вашем устройстве.
Мгновенное преобразование
Вставьте любой текст и получите корректно экранированный JSON за миллисекунды. Никакого ожидания ответа от удалённого сервера.
🛡️
Без аккаунта и установки
Откройте страницу и сразу начинайте экранировать. Никакой регистрации, никакого браузерного расширения, никакого CLI-инструмента для установки. Работает на любом устройстве с современным браузером.
📋
Полное покрытие символов
Обрабатывает все обязательные по JSON escape-последовательности: двойные кавычки, обратные слеши, управляющие символы (U+0000 — U+001F) и Unicode-последовательности, включая emoji и CJK-символы.

Сценарии использования JSON String Escape

Фронтенд-разработка
Экранируйте пользовательский контент перед встраиванием в JSON-данные, отправляемые через fetch или XMLHttpRequest. Предотвращает некорректные запросы, когда пользователи вводят кавычки, переводы строк или emoji.
Работа с backend API
Формируйте тела JSON-ответов в языках, которые не экранируют строки автоматически (shell-скрипты, хранимые процедуры SQL, шаблонизаторы). Вставьте сырую строку, скопируйте экранированный вариант.
DevOps и конфигурация
Встраивайте многострочные PEM-блоки сертификатов, SSH-ключи или shell-скрипты в JSON-конфигурации для Terraform, CloudFormation или Kubernetes ConfigMaps, не нарушая структуру JSON.
QA и тестирование
Создавайте тестовые фикстуры с символами крайних случаев: табуляциями, нулевыми байтами, суррогатными парами Unicode и вложенными экранированными строками. Проверяйте, что ваш парсер корректно их обрабатывает.
Инженерия данных
Очищайте дважды экранированные записи логов из Elasticsearch, CloudWatch или Datadog. Снимайте экранирование со строки, чтобы восстановить исходное сообщение для анализа или повторной загрузки.
Изучение JSON
Наглядно видите, какие именно символы требуют экранирования согласно спецификации JSON. Полезно для тех, кто изучает ECMA-404 или пишет собственный JSON-парсер.

Справочник escape-последовательностей JSON

Спецификация JSON определяет ровно два обязательных экранирования (двойная кавычка и обратный слеш) и шесть коротких escape-последовательностей для распространённых управляющих символов. Все остальные управляющие символы (U+0000 — U+001F) должны использовать форму \uXXXX. Символы выше U+FFFF (например, emoji) можно представить как суррогатную пару UTF-16: \uD83D\uDE00.

СимволОписаниеЭкранированная форма
"Double quote\"
\Backslash\\
/Forward slash\/ (optional)
\nNewline (LF)\n
\rCarriage return\r
\tTab\t
\bBackspace\b
\fForm feed\f
U+0000–U+001FControl characters\u0000–\u001F
U+0080+Non-ASCII (e.g. emoji)\uXXXX or raw UTF-8

Экранирование строк JSON vs. кодирование JSON

Разработчики иногда путают экранирование строки с кодированием полного JSON-документа.

Экранирование строк
Работает с текстом внутри строкового значения JSON. Заменяет специальные символы последовательностями с обратным слешем, чтобы строка оставалась допустимой внутри двойных кавычек. Ввод: сырой текст. Вывод: экранированный текст (для валидного JSON ещё нужны окружающие кавычки).
Кодирование JSON (сериализация)
Преобразует всю структуру данных (объекты, массивы, числа, булевы значения, null) в текстовое представление JSON. Экранирование строк — один из шагов этого более широкого процесса. Ввод: структура данных. Вывод: полный JSON-документ.

Примеры кода

В каждом популярном языке есть встроенные функции для этого. Примеры на JavaScript, Python, Go и jq:

JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2')       // → '"Line 1\\nLine 2"'

// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'

// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"')  // → 'tabs\tand\nnewlines'

// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac')       // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json

# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2')           # → '"Line 1\\nLine 2"'

# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True)   # → '"Caf\\u00e9"'

# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False)  # → '"Caf\u00e9"'

# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""')      # → 'She said "hello"'
Go
package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// json.Marshal escapes a Go string for JSON
	raw := "Line 1\nLine 2\tindented"
	b, _ := json.Marshal(raw)
	fmt.Println(string(b))
	// → "Line 1\nLine 2\tindented"

	// Unescape with json.Unmarshal
	var out string
	json.Unmarshal([]byte(`"She said \"hello\""`), &out)
	fmt.Println(out)
	// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2	with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"

# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"

Часто задаваемые вопросы

Какие символы должны быть экранированы в строке JSON?
Спецификация JSON (RFC 8259) требует экранирования двойной кавычки (\"), обратного слеша (\\) и всех управляющих символов от U+0000 до U+001F. Прямой слеш (/) может быть экранирован как \/, но это необязательно. Все остальные символы Unicode, включая не-ASCII текст и emoji, можно использовать без экранирования, если документ использует кодировку UTF-8.
В чём разница между JSON escape и JSON stringify?
JSON.stringify() в JavaScript сериализует значение JavaScript в строку JSON, добавляя окружающие двойные кавычки и экранируя специальные символы внутри. Экранирование JSON относится конкретно к замене специальных символов escape-последовательностями с обратным слешем на уровне символов. Вызов JSON.stringify() на строке выполняет экранирование как часть процесса сериализации.
Как экранировать перевод строки в JSON?
Замените буквальный символ перевода строки (U+000A) двухсимвольной последовательностью \n. Аналогично, возврат каретки (U+000D) становится \r. При использовании JSON.stringify() или json.dumps() в Python эти замены происходят автоматически.
Почему моя строка JSON дважды экранирована?
Двойное экранирование происходит, когда строка сериализуется дважды. Например, вызов JSON.stringify() на строке, уже содержащей escape-последовательности, экранирует обратные слеши повторно: \n становится \\n. Чтобы исправить это, разберите строку один раз с помощью JSON.parse() перед повторной сериализацией, или проверьте конвейер на избыточные шаги кодирования.
Можно ли использовать одинарные кавычки в строках JSON?
Нет. Спецификация JSON требует двойных кавычек для всех строковых значений и имён свойств. Одинарные кавычки не являются допустимым JSON и вызовут ошибку разбора. Если ваши исходные данные содержат одинарные кавычки, их не нужно экранировать внутри JSON-строки в двойных кавычках, поскольку в этом контексте одинарные кавычки — обычные символы.
Безопасно ли использовать неэкранированные UTF-8 символы в JSON?
Да, при условии, что JSON-документ закодирован в UTF-8 — кодировке, которую RFC 8259 указывает как стандартную и рекомендуемую. Символы с диакритическими знаками, CJK-иероглифы и emoji можно использовать непосредственно в строке без экранирования \uXXXX. Некоторые устаревшие системы ожидают JSON только в ASCII; в таком случае используйте параметр ensure_ascii в Python или аналогичный флаг в вашем языке.
Как экранировать emoji в JSON?
Emoji выше U+FFFF представлены в JSON с помощью суррогатной пары UTF-16. Например, ухмыляющееся лицо (U+1F600) становится \uD83D\uDE00. Большинство сериализаторов обрабатывают это автоматически. Если вы пишете JSON вручную или ваши инструменты поддерживают только базовую многоязычную плоскость (BMP), используйте нотацию суррогатной пары. В противном случае можно включить emoji напрямую как символ UTF-8.