Екранування JSON-рядків — це процес перетворення спеціальних символів у рядку на послідовності екранування, які JSON-парсер зможе прочитати без порушення структури. Специфікація JSON (ECMA-404 / RFC 8259) вимагає, щоб певні символи всередині значень рядків передувалися зворотною скісною рискою. Без належного екранування буквальна подвійна лапка або новий рядок всередині рядка передчасно завершили б його та спричинили б помилку розбору.
Кожен JSON-рядок обмежується подвійними лапками. Коли сам рядок містить подвійну лапку, зворотну скісну риску або керуючий символ (від U+0000 до U+001F), символ необхідно замінити відповідною послідовністю екранування. Наприклад, буквальний новий рядок стає \n, табуляція — \t, а подвійна лапка — \". Будь-яку кодову точку Unicode також можна представити як \uXXXX, де XXXX — чотиризначне шістнадцяткове значення.
Розекранування (зворотна операція) перетворює ці послідовності зі зворотною скісною рискою назад на вихідні символи. Використовуйте його, коли отримуєте JSON-payload, у якому рядкові значення подвійно екрановані, або коли потрібно витягти сирий текст із запису JSON-журналу для відображення в UI або терміналі. Конвеєри агрегації журналів стикаються з цим постійно: коли JSON-закодоване повідомлення зберігається як рядкове значення в іншому JSON-документі, кожна зворотна скісна риска у внутрішньому рядку надходить подвоєною.
Навіщо використовувати інструмент JSON-екранування?
Додавання або видалення зворотних скісних рисок вручну — трудомістке і схильне до помилок заняття, особливо при роботі з багаторядковим текстом, шляхами до файлів або вбудованими фрагментами коду. Спеціалізований інструмент екранування виявляє граничні випадки, які пропускає ручне редагування.
🔒
Конфіденційна обробка
Ваші рядки ніколи не залишають браузер. Усе екранування та розекранування виконується локально в JavaScript без жодних серверних запитів, тому чутливі дані — API-ключі або токени — залишаються на вашому пристрої.
⚡
Миттєве перетворення
Вставте будь-який текст і отримайте коректно екранований JSON-вивід за лічені мілісекунди. Жодного очікування на зворотний запит до віддаленого сервера.
🛡️
Без облікового запису та встановлення
Відкрийте сторінку і починайте екранувати. Ніяких форм реєстрації, розширень браузера та CLI-інструментів для встановлення. Працює на будь-якому пристрої з сучасним браузером.
📋
Повне покриття символів
Обробляє всі обов'язкові екранування JSON: подвійні лапки, зворотні скісні риски, керуючі символи (від U+0000 до U+001F) та Unicode-послідовності, включно з емодзі та CJK-символами.
Сценарії використання JSON-екранування
Frontend-розробка
Екрануйте контент, згенерований користувачем, перед вбудуванням його у JSON-payload, що надсилається через fetch або XMLHttpRequest. Запобігає помилковим запитам, коли користувачі вводять лапки, нові рядки або емодзі.
Розробка 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-парсер.
Довідник послідовностей екранування JSON
Специфікація JSON визначає рівно два обов'язкові екранування (подвійна лапка та зворотна скісна риска) і шість коротких послідовностей для поширених керуючих символів. Усі інші керуючі символи (від U+0000 до U+001F) повинні використовувати форму \uXXXX. Символи вище U+FFFF (наприклад, емодзі) можна представити у вигляді сурогатної пари UTF-16: \uD83D\uDE00.
Символ
Опис
Екранована форма
"
Double quote
\"
\
Backslash
\\
/
Forward slash
\/ (optional)
\n
Newline (LF)
\n
\r
Carriage return
\r
\t
Tab
\t
\b
Backspace
\b
\f
Form feed
\f
U+0000–U+001F
Control 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 та емодзі, можуть зустрічатися без екранування, якщо документ використовує кодування UTF-8.
У чому різниця між JSON-екрануванням і JSON stringify?
JSON.stringify() у JavaScript серіалізує ціле JavaScript-значення в JSON-рядок, додаючи навколо подвійні лапки та екрануючи спеціальні символи всередині. JSON-екранування стосується саме посимвольної заміни спеціальних символів послідовностями зі зворотною скісною рискою. Виклик JSON.stringify() на рядку виконує екранування як частину процесу серіалізації.
Як екранувати новий рядок у JSON?
Замініть буквальний символ нового рядка (U+000A) на двосимвольну послідовність \n. Аналогічно, символ повернення каретки (U+000D) стає \r. Якщо ви використовуєте JSON.stringify() або json.dumps() у Python, ці заміни відбуваються автоматично.
Чому мій JSON-рядок подвійно екранований?
Подвійне екранування виникає, коли рядок серіалізується двічі. Наприклад, виклик JSON.stringify() на рядку, що вже містить послідовності екранування, знову екранує зворотні скісні риски: \n стає \\n. Щоб виправити це, один раз розберіть рядок за допомогою JSON.parse() перед повторною серіалізацією або перевірте ваш конвеєр на зайві кроки кодування.
Чи можна використовувати одинарні лапки в JSON-рядках?
Ні. Специфікація JSON вимагає подвійних лапок для всіх рядкових значень і імен властивостей. Одинарні лапки не є коректним JSON і спричинять помилку розбору. Якщо вихідні дані містять одинарні лапки, їх не потрібно екранувати всередині JSON-рядка в подвійних лапках, оскільки в цьому контексті одинарні лапки є звичайними символами.
Чи безпечно вставляти неекрановані UTF-8-символи в JSON?
Так, за умови, що JSON-документ закодований у UTF-8, що RFC 8259 визначає як стандартне та рекомендоване кодування. Символи на кшталт літер з наголосом, CJK-ієрогліфів та емодзі можуть з'являтися безпосередньо в рядку без \uXXXX-екранування. Деякі старіші системи очікують JSON лише в ASCII; у цьому випадку використовуйте параметр ensure_ascii у Python або аналогічний прапор у вашій мові.
Як екранувати емодзі в JSON?
Емодзі вище U+FFFF представляються в JSON за допомогою сурогатної пари UTF-16. Наприклад, усміхнене обличчя (U+1F600) стає \uD83D\uDE00. Більшість серіалізаторів обробляють це автоматично. Якщо ви пишете JSON вручну або ваш інструментарій підтримує лише Базову багатомовну площину, використовуйте нотацію сурогатної пари. В іншому випадку вставляйте емодзі безпосередньо як UTF-8-символ.