Escapování JSON řetězců je proces převodu speciálních znaků uvnitř řetězce na escape sekvence, které JSON parsery dokáží zpracovat bez narušení struktury. Specifikace JSON (ECMA-404 / RFC 8259) vyžaduje, aby určité znaky uvnitř řetězcových hodnot byly uvozeny zpětným lomítkem. Bez správného escapování by literální dvojitá uvozovka nebo znak nového řádku uvnitř řetězce ukončily řetězec předčasně a způsobily chybu při parsování.
Každý JSON řetězec je ohraničen dvojitými uvozovkami. Pokud řetězec sám obsahuje dvojitou uvozovku, zpětné lomítko nebo řídicí znak (U+0000 až U+001F), musí být daný znak nahrazen jeho escape sekvencí. Například literální znak nového řádku se zapíše jako \n, tabulátor jako \t a dvojitá uvozovka jako \". Libovolný Unicode kódový bod lze také zapsat ve formě \uXXXX, kde XXXX je čtyřmístná hexadecimální hodnota.
Unescapování (zpětná operace) převede tyto sekvence se zpětným lomítkem zpět na původní znaky. Použijte ji, když obdržíte JSON payload, kde jsou hodnoty řetězců dvojitě escapovány, nebo když potřebujete extrahovat čistý text z JSON záznamu logu pro zobrazení v UI nebo terminálu. V agregačních pipeline logů se s tím setkáte neustále: pokud je JSON zakódovaná zpráva uložena jako hodnota řetězce uvnitř jiného JSON dokumentu, každé zpětné lomítko ve vnitřním řetězci dorazí zdvojené.
Proč používat nástroj pro escapování JSON?
Ruční přidávání nebo odstraňování zpětných lomítek je únavné a náchylné k chybám, zejména při práci s víceřádkovým textem, cestami k souborům nebo vloženými úryvky kódu. Specializovaný nástroj zachytí okrajové případy, které při ručním editování unikají.
🔒
Zpracování s důrazem na soukromí
Vaše řetězce nikdy neopustí prohlížeč. Veškeré escapování a unescapování probíhá lokálně v JavaScriptu bez volání serveru, takže citlivá data jako API klíče nebo tokeny zůstanou na vašem počítači.
⚡
Okamžitý převod
Vložte libovolný text a během milisekund získáte správně escapovaný JSON výstup. Žádné čekání na odpověď ze vzdáleného serveru.
🛡️
Bez účtu nebo instalace
Otevřete stránku a začněte escapovat. Žádný registrační formulář, žádné rozšíření prohlížeče, žádný CLI nástroj k instalaci. Funguje na libovolném zařízení s moderním prohlížečem.
📋
Úplné pokrytí znaků
Zpracovává všechna escapování vyžadovaná JSON specifikací: dvojité uvozovky, zpětná lomítka, řídicí znaky (U+0000 až U+001F) a Unicode sekvence včetně emodži a CJK znaků.
Případy použití escapování JSON řetězců
Frontend vývoj
Escapujte uživatelský obsah před jeho vložením do JSON payloadu odesílaného přes fetch nebo XMLHttpRequest. Předchází chybně formátovaným požadavkům, když uživatelé zadají uvozovky, nové řádky nebo emodži.
Práce s backend API
Sestavujte těla JSON odpovědí v jazycích, které automaticky neescapují řetězce (shell skripty, SQL uložené procedury, šablonovací enginy). Vložte surový řetězec a zkopírujte escapovanou verzi.
DevOps a konfigurace
Vkládejte víceřádkové PEM bloky certifikátů, SSH klíče nebo shell skripty do JSON konfiguračních souborů pro Terraform, CloudFormation nebo Kubernetes ConfigMaps bez narušení JSON struktury.
QA a testování
Vytvářejte testovací fixtures obsahující hraniční znaky: tabulátory, nulové bajty, Unicode náhradní páry a vnořené escapované řetězce. Ověřte, že váš parser je správně zpracovává.
Datové inženýrství
Čistěte dvojitě escapované záznamy logů z Elasticsearch, CloudWatch nebo Datadog. Unescapujte řetězec pro obnovení původní zprávy k analýze nebo opětovnému zpracování.
Výuka JSON
Zjistěte přesně, které znaky vyžadují escapování podle JSON specifikace. Užitečné pro studenty procházející ECMA-404 nebo tvořící vlastní JSON parser.
Přehled JSON escape sekvencí
JSON specifikace definuje přesně dvě povinná escapování (dvojitá uvozovka a zpětné lomítko) a šest krátkých escape sekvencí pro běžné řídicí znaky. Všechny ostatní řídicí znaky (U+0000 až U+001F) musí používat formu \uXXXX. Znaky nad U+FFFF (jako emodži) lze zapsat jako UTF-16 náhradní pár: \uD83D\uDE00.
Znak
Popis
Escapovaná forma
"
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
Escapování JSON vs. kódování JSON
Vývojáři si někdy pletou escapování řetězce s kódováním celého JSON dokumentu.
Escapování řetězce
Operuje na textu uvnitř hodnoty JSON řetězce. Nahrazuje speciální znaky sekvencemi se zpětným lomítkem, aby řetězec zůstal platný v rámci dvojitých uvozovek. Vstup: surový text. Výstup: escapovaný text (stále potřebuje obklopující uvozovky, aby byl platným JSON).
Kódování JSON (serializace)
Převádí celou datovou strukturu (objekty, pole, čísla, logické hodnoty, nulls) do JSON textové reprezentace. Escapování řetězce je jedním krokem v tomto větším procesu. Vstup: datová struktura. Výstup: kompletní JSON dokument.
Příklady kódu
Každý hlavní jazyk má pro tuto operaci vestavěné funkce. Příklady v JavaScriptu, Pythonu, Go a 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"
Často kladené dotazy
Které znaky musí být escapovány v JSON řetězci?
JSON specifikace (RFC 8259) vyžaduje escapování dvojité uvozovky (\"), zpětného lomítka (\\) a všech řídicích znaků od U+0000 do U+001F. Lomítko (/) může být escapováno jako \/, ale to je volitelné. Všechny ostatní Unicode znaky, včetně textu mimo ASCII a emodži, se mohou vyskytovat bez escapování, pokud dokument používá kódování UTF-8.
Jaký je rozdíl mezi escapováním JSON a JSON stringify?
JSON.stringify() v JavaScriptu serializuje celou JavaScriptovou hodnotu do JSON řetězce, přidává obklopující dvojité uvozovky a escapuje speciální znaky uvnitř. Escapování JSON označuje konkrétně nahrazování speciálních znaků sekvencemi se zpětným lomítkem na úrovni znaků. Volání JSON.stringify() na řetězci provádí escapování jako součást procesu serializace.
Jak escapovat nový řádek v JSON?
Nahraďte literální znak nového řádku (U+000A) dvouznakovým sledem \n. Podobně návrat vozíku (U+000D) se zapíše jako \r. Pokud použijete JSON.stringify() nebo json.dumps() v Pythonu, tato nahrazení proběhnou automaticky.
Proč je můj JSON řetězec dvojitě escapován?
Dvojité escapování nastane, když je řetězec serializován dvakrát. Například volání JSON.stringify() na řetězci, který již obsahuje escape sekvence, escapuje zpětná lomítka znovu: \n se stane \\n. Chybu opravte tak, že řetězec jednou zparsujete pomocí JSON.parse() před opětovnou serializací, nebo zkontrolujte svou pipeline na nadbytečné kroky kódování.
Mohu v JSON řetězcích používat jednoduché uvozovky?
Ne. JSON specifikace vyžaduje dvojité uvozovky pro všechny řetězcové hodnoty i názvy vlastností. Jednoduché uvozovky nejsou platným JSON a způsobí chybu při parsování. Pokud zdrojová data obsahují jednoduché uvozovky, nepotřebují escapování uvnitř JSON řetězce s dvojitými uvozovkami, protože jednoduché uvozovky jsou v daném kontextu běžné znaky.
Je bezpečné vkládat neescapované UTF-8 znaky do JSON?
Ano, pokud je JSON dokument kódován v UTF-8, které RFC 8259 specifikuje jako výchozí a doporučené kódování. Znaky jako písmena s diakritikou, CJK ideografy a emodži mohou být přímo v řetězci bez escapování \uXXXX. Některé starší systémy očekávají JSON pouze s ASCII znaky; v takovém případě použijte možnost ensure_ascii v Pythonu nebo podobný přepínač ve svém jazyce.
Jak escapovat emodži v JSON?
Emodži nad U+FFFF jsou v JSON reprezentovány pomocí UTF-16 náhradního páru. Například usmívající se obličej (U+1F600) se zapíše jako \uD83D\uDE00. Většina serializátorů to zpracovává automaticky. Pokud píšete JSON ručně nebo vaše nástroje podporují pouze Základní vícejazyčnou rovinu, použijte notaci náhradního páru. Jinak vložte emodži přímo jako UTF-8 znak.