Data JSON (.json)
RFC StandardníJavaScript Object Notation (JSON) je lehký, pro člověka čitelný textový formát pro výměnu dat, který podporuje řada programovacích jazyků a který se běžně používá ve webových API.
Převést JSON na HTML
Bezplatný konvertor z JSON do HTML v prohlížeči. Převeďte soubory okamžitě ve svém zařízení.
Komprese JSON online
Soukromě - soubory nikdy neopustí vaše zařízení
Kontrola a metadata
Operační systémy a analyzátory souborů identifikují soubory JSON kontrolou počáteční binární sekvence bajtů:
Podpis hlavičky na úrovni bajtů (Magic Bytes)
Operační systémy a analyzátory souborů identifikují soubory JSON kontrolou počáteční binární sekvence bajtů:
HEXADECIMÁLNÍ PODPIS (POSUN 0):
7B or 5BASCII REPREZENTACE: { or [
Standardizace: RFC 8259 / ECMA-404 / ISO/IEC 21778
Technické specifikace
| Architektura kontejneru | Lehký textový formát nezávislý na programovacím jazyku pro výměnu dat |
| Komprese | Gzip, Brotli a Zstandard mohou komprimovat text JSON; výsledná velikost závisí na datech a nastavení |
| Pořadí bajtů | Unicode kódovaný v UTF-8 (doporučuje se bez značky pořadí bajtů / BOM) |
| Barevné prostory | Nevztahuje se |
| Kanály a struktura | Šest základních datových typů: objekt, pole, řetězec, číslo, boolean, null |
| Max. rozměry | Neomezeno; limitováno pouze pamětí parseru a maximální délkou řetězce |
| Průhlednost | Nevztahuje se |
| Streamování a progresivní načítání | NDJSON (Newline Delimited JSON) / JSON Lines umožňuje progresivní zpracování proudů dat |
Technická srovnávací matice: JSON vs konkurence
| Technický atribut | JSON (Aktuální) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Složitost syntaxe | Minimální (6 typů, přísná syntaxe) | Vysoká (založeno na odsazení, složitá specifikace) | Vysoká (ukecané uzavírací značky, jmenné prostory) | Binární přenosový formát definovaný schématem |
| Výkon parsování | Extrémně rychlý ve všech moderních jazycích | Pomalý (složité parsování odsazení) | Mírně až velmi pomalý (náročná konstrukce DOM) | Ultrarychlá (binární deserializace bez kopírování) |
| Podpora komentářů | Ne (záměrně vynecháno, aby se zabránilo nárůstu metadat) | Ano (# komentáře) | Ano (<!-- komentáře -->) | Ano v souborech .proto |
| Velikost síťového payloadu | Kompaktní text; výsledek komprese závisí na datech a nastavení | Kompaktní text | Upovídaný text (silné opakování značek) | Ultrakompaktní binární |
Běžné režimy poškození a příručka pro obnovení v hex
SyntaxError: neočekávaný token , v JSON na pozici X.
Hlavní příčina: Koncová čárka za poslední položkou v poli nebo objektu, což je v JSONu podle RFC 8259 přísně nelegální.
Obnovení: Před předáním do JSON.parse() odstraňte koncové čárky z klíčů objektů a položek polí.
SyntaxError: neočekávaný token ' v JSON.
Hlavní příčina: Řetězce nebo klíče uzavřené v jednoduchých uvozovkách ('') namísto dvojitých uvozovek ("").
Obnovení: Nahraďte všechny řetězce a klíče v jednoduchých uvozovkách standardními řetězci v dvojitých uvozovkách.
Bezpečnostní analýza a vektory útoků na parser
JSON je čistě textový a bezpečný proti přímému spuštění kódu, avšak parsování nedůvěryhodného JSONu může vést k Prototype Pollution, ReDoS nebo vyčerpání paměti.
Známé vektory útoků
- Prototype Pollution: Klíče pojmenované '__proto__' nebo 'constructor' modifikující Object.prototype v JavaScriptových aplikacích.
- Útok odepření služby (DoS) přetečením zásobníku prostřednictvím hluboce vnucených JSON struktur (např. 10 000 otevíracích závorek).
- Ztráta numerické přesnosti: JavaScriptová čísla větší než 2^53 - 1 (9 007 199 254 740 991) tiše ztrácejí přesnost.
Doporučené bezpečnostní postupy: Nikdy nevyhodnocujte JSON pomocí eval(). Používejte JSON.parse() a sanitizujte vlastnosti '__proto__' v rekurzivních funkcích pro slučování objektů.
Historický vývoj a milníky
Klíčové výhody a přednosti
- Pro lidi čitelná, sama sebe popisující a stručná textová struktura.
- Nativní podpora parsování integrovaná v JavaScriptových enginech (JSON.parse) a každém významném programovacím jazyku.
- Přísná specifikace zabraňuje libovolnému spouštění kódu.
Technická omezení a nevýhody
- Žádná podpora pro komentáře, koncové čárky nebo cyklické odkazy na objekty.
- Žádné nativní binární typy (binární data musí být zakódována v base64, což zvětšuje velikost o 33 %).
- Neefektivní serializace ve srovnání s binárními formáty jako Protocol Buffers nebo MessagePack.
Zajímavé technické drobnosti
- Douglas Crockford přidal do původních nástrojů JSMin JSON licenční doložku softwaru: „Software bude používán pro dobro, ne pro zlo".
- JSON je striktní podmnožinou syntaxe JavaScriptu, ale do verze ES2019 byly surové neescapované znaky U+2028 a U+2029 platné v JSONu, avšak neplatné v JavaScriptových řetězcích.
- Douglas Crockford zjistil, že rané webové prohlížeče dokázaly vyhodnotit JSON přímo na objekty pomocí nativního JavaScriptového eval() předtím, než byla v ECMAScript 5 standardizována dedikovaná API JSON.parse().
Často kladené technické otázky
Proč JSON nepodporuje komentáře?
Gramatika JSON komentáře nepovoluje. Implementace se mohou lišit ve zpracování rozšíření a dat specifických pro aplikaci, takže samotný formát interoperabilitu nezaručuje.
Jak se v JSONu ukládají 64bitová celá čísla bez ztráty přesnosti?
Nativní typ Number v JavaScriptu je číslo s plovoucí řádovou čárkou s dvojitou přesností dle IEEE 754, které přesně podporuje pouze celá čísla do 2^53 - 1. 64bitová celá čísla (například ID nebo časová razítka z databáze) musí být v JSONu serializována jako řetězce (např. '1234567890123456789').
Jaký je rozdíl mezi JSON a NDJSON / JSON Lines?
Standardní JSON balí celý payload do jednoho kořenového objektu nebo pole, což vyžaduje, aby parsery načetly celý text před jeho vyhodnocením. NDJSON (Newline Delimited JSON) odděluje jednotlivé platné záznamy JSON pomocí znaků nového řádku (\n), což umožňuje paměťově efektivní streamování obrovských multi-gigabajtových datových sad řádek po řádku.
Související konverzní páry pro JSON
Převedením dat JSON na zdrojový kód HTML se surové strukturované dvojice klíč-hodnota změní v lidsky čitelné webové dokumenty připravené k vykreslení v prohlížeči.
Převod zdrojového kódu HTML na data JSON mění čitelné webové dokumenty na strukturované páry klíč-hodnota pro programové zpracování a příjem přes rozhraní API.
Konverze textového výpisu SQL do formátu JSON převádí pevně strukturované tabulky relační databáze na flexibilní vnořené objekty pro moderní webové aplikace.
Transformace nestrukturovaných textových souborů JSON na strukturovanou relační databázi SQLite umožňuje rychlé indexování a dotazování nad velkými datovými soubory.
Konverze souborů Adobe Swatch Exchange na struktury Color JSON transformuje binární designové palety na čitelné textové objekty pro moderní webové aplikace.
Konverze textových dat Color JSON na binární vzorky Adobe ASE propojuje webové designové tokeny a profesionální desktopové aplikační programy.
Konverze textových souborů palety GIMP na struktury JSON barev umožňuje webovým aplikacím číst vzorníky barev přímo bez složitých parsovacích skriptů.
Konverze strukturovaných souborů JSON barev na CSS proměnné transformuje surové datové objekty na nativní stylové vlastnosti pro webové stránky.