JSON formatter és validátor

Acrafto Team Fejlesztők
Frissítve
Bemenetre vár. Illesszen be JSON-t fent, vagy húzzon ide egy .json fájlt.

Illesszen be bármilyen JSON-t a fenti mezőbe, és ez a JSON formatter és validátor már gépelés közben ellenőrzi. Az érvényes bemenetet a választott behúzással formázza, vagy egyetlen sorba tömöríti. Érvénytelen bemenetnél pontos hibaüzenetet kap a sor és az oszlop számával, kiemelt részlettel, a szokásos hibáknál pedig egy kattintásos javítással. Minden az Ön böngészőjében fut, így az API-válaszok, a konfigurációs fájlok és az exportok nem hagyják el a számítógépét.

Mit tud ez a JSON formatter

  • JSON formázás 2 szóközzel, 4 szóközzel vagy tabulátorral. A kimenet megőrzi a kulcsok eredeti sorrendjét, hacsak nem jelöli be a Kulcsok rendezése opciót.
  • JSON tömörítés (minify): eltávolít minden szóközt és sortörést. Az eredmény alatti méretkijelzés megmutatja, hány bájtot takarított meg.
  • JSON validálás élőben az RFC 8259, vagyis a jelenlegi JSON-szabvány szerint. Az állapotsor abban a pillanatban zöldre vált, amikor a dokumentum helyes.
  • Gyakori hibák automatikus javítása: felesleges vesszők, egyszeres idézőjelek, idézőjel nélküli kulcsok, megjegyzések, Python-stílusú True, None és NaN, valamint .5 vagy +1 alakú számok.
  • Fájlok betöltése a Fájl megnyitása gombbal vagy egy .json fájl bemenetre húzásával. Az eredményt utána letöltheti, vagy visszaküldheti a bemenetbe egy újabb körhöz.

Miért fontosabb a hibaüzenet, mint a piros szín

A legtöbb online validátor csak annyit közöl, hogy valami hibás. A böngészők sem sokkal jobbak: a JSON.parse a Chrome-ban azt írja ki, hogy Unexpected token } in JSON at position 148, a Firefox szerint expected property name or '}', és egyik sem mondja meg, melyik sort kell megnézni. Ennek az eszköznek saját parsere van, amely megjegyzi, hol kezdődik minden token. Amikor elakad, megkapja a sor és az oszlop számát, az érintett sor részletét egy ^ jellel a hibás karakter alatt, valamint egy közérthető tippet, például Valószínűleg hiányzik egy vessző két tulajdonság között. Az Ugrás a hibához gomb a kurzort egyenesen erre a helyre viszi a bemenetben.

A beillesztett dokumentumokban ezeket a hibákat látjuk a leggyakrabban:

BemenetProblémaHelyes JSON
{'name': 'Ada'}egyszeres idézőjelek{"name": "Ada"}
{name: "Ada"}idézőjel nélküli kulcs{"name": "Ada"}
[1, 2, 3,]felesleges vessző a végén[1, 2, 3]
{"a": 1 "b": 2}hiányzó vessző{"a": 1, "b": 2}
{"ok": True}Python-literál{"ok": true}
{"x": 007}kezdő nulla{"x": 7} vagy {"x": "007"}
// commentmegjegyzésa JSON-ban nem megengedett

A Javítsa ki helyettem gomb ezeket mind kijavítja, kivéve a hiányzó vesszőt és a kezdő nullát. A javítás szándékosan óvatos: soha nem találgatja, hová kell a hiányzó vessző, mert ha rossz helyre kerül, megváltozik az adatok jelentése, a 007 pedig jelentheti a 7-es számot és egy kódot is. Ilyen esetekben a pontos pozíciót kapja meg.

Nagy számok, kulcssorrend és más dolgok, amelyek általában elromlanak

Sok formázó úgy működik, hogy meghívja a JSON.parse, majd a JSON.stringify függvényt. Ez az oda-vissza alakítás csendben károsítja az adatokat. Egy Twitter- vagy Snowflake-azonosító, például az 1234567890123456789, meghaladja a JavaScript-számok 2^53-as határát, és 1234567890123456800 lesz belőle. Az 1.0 értékből 1 lesz, az 1e3 értékből 1000. Ez a formatter a számokat soha nem alakítja lebegőpontos értékké. Minden literált pontosan úgy másol át, ahogy le volt írva, így a kimenet a bemenet hű újraformázása, nem pedig az újraértelmezése. Ugyanez érvényes a stringeken belüli escape-szekvenciákra: a "\u00e9" alak "\u00e9" marad, és nem lesz belőle "é".

A kulcsok sorrendje is megmarad. A JSON-specifikáció szerint az objektum tagjai rendezetlenek, a konfigurációs fájlok, a tesztadatok és a kódáttekintések azonban sokkal jobban olvashatók, ha a sorrend stabil. Ha kanonikus formát szeretne, például két API-válasz összehasonlításához egy diff eszközben, kapcsolja be a Kulcsok rendezése opciót, és mindkét dokumentum minden beágyazási szinten ábécérendben sorolja fel a tulajdonságait.

JSON formázás vagy tömörítés: mikor melyiket használja

A szépen formázott JSON embereknek készül. Akkor használja, amikor egy API-választ néz át, package.json, tsconfig.json vagy OpenAPI dokumentumot ír, vagy amikor tesztadatokat tárol egy repositoryban, ahol a diffnek soronként egy változást kell mutatnia. A JavaScript világában a 2 szóköz a szokás, a Python- és .NET-projektekben a 4 szóköz gyakori, tabulátornál pedig minden olvasó maga választja meg a szélességet.

A tömörített JSON gépeknek készül. A szóközök és sortörések jellemzően a formázott dokumentum 20 és 40 százaléka közötti részét teszik ki, így eltávolításukkal kisebbek lesznek a böngészőknek küldött válaszok, a Redisben vagy adatbázisoszlopban tárolt értékek és a HTML-be ágyazott data-* attribútumok. A gzip a különbség egy részét behozza, de a minifikált változat gzippel is kisebbre tömörödik. Az eredmény alatti méretkijelzés pontosan megmutatja a különbséget az Ön dokumentumánál.

JSON kezelése a terminálban és a szerkesztőkben

A rendszeresen feldolgozott fájlokhoz egy parancssori eszköz gyorsabb bármelyik weboldalnál. A jq . file.json formáz, a jq -c . file.json tömörít, a python -m json.tool file.json pedig mindenhol működik, ahol telepítve van a Python. A Visual Studio Code a Shift+Alt+F billentyűkombinációval formázza a JSON-t, és séma szerint validálja, ha hozzáad egy $schema tulajdonságot. Ez az oldal a többi esetre való: a fejlesztői eszközök Network lapjáról kimásolt válaszra, egy naplósorra, egy wikiből származó konfigurációs részletre, vagy egy gyors ellenőrzésre olyan gépen, ahová semmit sem telepíthet.

Kapcsolódó eszközök az oldalon: a Base64 kódoló és dekódoló dekódolja a JWT payload részét, amely Base64url kódolású JSON. A Unix időbélyeg átalakító olvasható dátummá alakítja a legtöbb API-válaszban található createdAt számokat, az UUID dekóder pedig megmutatja az adataiban szereplő azonosítók verzióját és időbélyegét. További segédeszközöket a Fejlesztők kategóriában talál.

Gyakran ismételt kérdések

Feltöltődik a JSON-om egy szerverre? Nem. Az elemzés, a formázás és a javítás teljes egészében az Ön böngészőjében, JavaScriptben fut. Miután az oldal betöltődött, kikapcsolhatja a hálózatot, és az eszköz tovább működik. Semmit sem naplózunk és nem tárolunk.
Miért utasítja el a validátor a megjegyzéseket, ha a szerkesztőm elfogadja őket? A megjegyzéseket a JSON szerzője, Douglas Crockford szándékosan hagyta ki a formátumból, hogy ne lehessen parser-utasításokra használni őket. Az olyan fájlok, mint a tsconfig.json vagy a .vscode/settings.json, technikailag JSONC formátumúak, ami a JSON szerkesztők által támogatott bővítése. Az API-k, az adatbázisok és a legtöbb programozási nyelv szigorú parserei elutasítják őket. A javítás gomb eltávolítja a megjegyzéseket, így az eredmény mindenhol érvényes.
Formázhatok JSON Lines fájlt vagy több objektumot egyszerre? Egy JSON-dokumentum pontosan egy értéket tartalmaz. Ha több, vesszővel vagy sortöréssel elválasztott objektumot illeszt be, a validátor az első fölösleges értéknél megáll. Tegye őket szögletes zárójelek közé, így tömb lesz belőlük, és azt már formázhatja. A javítás gomb ezt nem végzi el automatikusan, mert nem tudhatja, hogy a bemenetnek egyetlen dokumentumnak kellett-e lennie.
Mekkora a maximális méret? Nincs rögzített korlát. A néhány megabájtos dokumentumok egy laptopon jóval egy másodpercen belül elkészülnek. Nagyjából 400 kB felett a szintaxiskiemelés kikapcsol, hogy az oldal gyors maradjon, a másolás és a letöltés azonban továbbra is működik.
Megváltoztatja az adatokat a kulcsok rendezése? Nem. A JSON-ban az objektumok definíció szerint rendezetlenek, lásd a JSON szócikket a Wikipédián, így a parser a rendezett és az eredeti dokumentumot ugyanannak az értéknek olvassa. A tömbök sorrendje soha nem változik, mert az az adatok része.
Hogyan escape-eljem a JSON-t, hogy egy stringbe ágyazhassam? Először tömörítse, majd escape-elje az összes fordított perjelet és dupla idézőjelet. Sok nyelv ezt közvetlenül elvégzi: JavaScriptben a JSON.stringify(JSON.stringify(obj)), Pythonban a json.dumps(json.dumps(obj)) olyan JSON-stringet ad vissza, amely a JSON-szöveget tartalmazza.

Örülnék, ha megosztanád ezeket az oldalakat barátaiddal, elmentenéd a könyvjelzőkbe vagy linkelnéd őket. Köszönöm! 🙏