Preskočiť na obsah

JSON Formátovač: Skrášliť & Validovať JSON Online Zadarmo

Okamžite formátujte minifikovaný JSON so správnym odsadením. Bezplatný online JSON formátovač validuje syntax, skrášľuje kód a urýchľuje ladenie. Funguje v prehliadači s formátovaním v reálnom čase.

JSON Formátovač

Formátujte a skrášľujte váš JSON pomocou tohto jednoduchého nástroja - formátovanie prebieha automaticky počas písania!

Formátovaný JSON sa zobrazí automaticky...

Kalkulačka načítavania...
📚

Dokumentácia

Čo je formátovač JSON?

Formátovač JSON je nástroj, ktorý prepisuje text JSON (JavaScript Object Notation) s odsadením a zalomením riadkov bez zmeny samotných údajov. JSON je textový formát na ukladanie a odosielanie štruktúrovaných údajov, založený na dvojiciach názov/hodnota a zoznamoch. Programy zvyčajne šetria miesto odstránením všetkých nadbytočných bielych znakov, čím vznikne jeden hustý riadok, ktorý sa človeku ťažko číta. Formátovač, nazývaný aj nástroj na skrášľovanie alebo pretty printer, pridáva tieto biele znaky späť konzistentným spôsobom, aby bola štruktúra viditeľná. Tento nástroj formátuje JSON automaticky počas písania alebo vkladania. Neobsahuje tlačidlo na formátovanie; výstup sa aktualizuje po každom stlačení klávesu. Tlačidlo resetovania vymaže vstup a tlačidlo kopírovania skopíruje naformátovaný výsledok.

Pravidlá syntaxe JSON

JSON je definovaný špecifikáciou s názvom RFC 8259. Má dva typy kontajnerov:

Objekty obsahujú dvojice názov/hodnota v zložených zátvorkách:

1{"name": "John", "age": 30, "city": "New York"}
2

Polia obsahujú usporiadané zoznamy v hranatých zátvorkách:

1["apple", "banana", "cherry"]
2

Hodnota v JSON musí byť jedným zo šiestich typov: reťazec, číslo, boolovská hodnota (true alebo false), null, objekt alebo pole.

Väčšinu chýb spôsobuje niekoľko pravidiel:

  • Názvy vlastností musia byť uzavreté v dvojitých úvodzovkách. {name: "John"} je neplatné; musí byť {"name": "John"}.
  • Reťazce musia používať dvojité, nie jednoduché úvodzovky.
  • Za poslednou položkou v objekte alebo poli nesmie nasledovať čiarka (čiarky na konci nie sú povolené).
  • JSON nemá syntax komentárov, hoci jeho vzhľad so zloženými a hranatými zátvorkami pochádza z JavaScriptu.
  • JSON nemá hodnotu undefined. Pre chýbajúcu hodnotu použite null.

Častou chybou je vloženie literálu objektu JavaScriptu namiesto JSON. {name: 'John', age: undefined} je platný JavaScript, ale nie platný JSON. Verzia JSON je {"name": "John", "age": null}.

Ako tento formátovač JSON funguje

Mnohé formátovače JSON spracujú text pomocou JSON.parse(), aby vytvorili objekt JavaScriptu, a potom pomocou JSON.stringify() premenia objekt späť na text s medzerami. Tento spätný prechod má vedľajší účinok: čísla v JavaScripte používajú formát čísel s pohyblivou rádovou čiarkou s dvojitou presnosťou IEEE 754, ktorý po prekročení hodnoty 2^53 − 1 (9,007,199,254,740,991) nedokáže presne reprezentovať každé celé číslo. Identifikátor ako 9007199254740993 sa po tomto spätnom prechode môže zmeniť na 9007199254740992.

Tento nástroj sa tomuto kroku vyhýba. Vstup číta znak po znaku pomocou malého ručne napísaného syntaktického analyzátora a namiesto prevodu každého čísla alebo reťazca na hodnotu JavaScriptu skopíruje túto časť textu presne tak, ako bola napísaná, a potom ju umiestni na správnu úroveň odsadenia. Keďže čísla sa nikdy neprevádzajú na plávajúce čísla, celé čísla ľubovoľnej veľkosti si zachovajú svoje presné číslice. Ak je v objekte ten istý kľúč zapísaný dvakrát, obe kópie zostanú na svojom mieste, namiesto toho, aby sa zachovala iba posledná, čo by sa stalo pri vytvorení objektu JavaScriptu.

Postup krok za krokom:

  1. Prečítajte si ďalší token (objekt, pole, reťazec, číslo, true, false alebo null).
  2. Kontrola tokenu podľa gramatiky JSON. Ak porušuje pravidlo, napríklad obsahuje kľúč bez úvodzoviek alebo čiarku na konci, token sa odmietne.
  3. Skopírovanie textu tokenu bez zmien do výstupu.
  4. Pridanie zalomenia riadka a odsadenie o 2 medzery pre každú úroveň vnorenia v objekte alebo poli. Prázdny objekt alebo pole zostane na jednom riadku, ako {} alebo [].
  5. Opakovanie, kým sa nenačíta celý vstup.

Odsadenie je pevne nastavené na 2 medzery; neexistuje nastavenie na jeho zmenu. Kým je vstupné pole prázdne, panel výstupu zobrazuje zástupný text „Formatted JSON will appear here automatically...“. Ak vstup porušuje pravidlo JSON, nástroj zobrazí správu „Invalid JSON: Please check your input“ namiesto technickej správy analyzátora s presnou pozíciou znaku. Vstavaná funkcia prehliadačov JSON.parse() naopak v texte chyby uvádza aj pozíciu znaku.

Vyriešený príklad

Tento minifikovaný vstup:

1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2

sa zmení na:

1{
2  "name": "John Doe",
3  "age": 30,
4  "address": {
5    "street": "123 Main St",
6    "city": "Anytown",
7    "state": "CA"
8  },
9  "hobbies": [
10    "reading",
11    "hiking",
12    "photography"
13  ]
14}
15

Každý vnorený objekt alebo pole je odsadené o jednu úroveň viac než nadradený objekt alebo pole, takže vzťah medzi address a jeho tromi poľami je na prvý pohľad viditeľný.

Druhý príklad ukazuje, prečo je dôležité kopírovať literály. Tento vstup:

1{"id":9007199254740993}
2

sa naformátuje takto:

1{
2  "id": 9007199254740993
3}
4

Číslice zostanú presne také, ako boli zadané. Formátovač založený na JSON.parse() a následnom JSON.stringify() by toto číslo potichu zmenil na 9007199254740992.

Bežné chyby v JSON

  • Názov vlastnosti bez úvodzoviek: {name: "John"}. Oprava: {"name": "John"}.
  • Čiarka na konci: {"age": 30,}. Oprava: odstráňte čiarku pred uzatváracou zloženou zátvorkou.
  • Nesúhlasné zátvorky: {"data": [1, 2}. Oprava: pred uzavretím objektu uzavrite pole pomocou ].
  • Neuzavretý reťazec: {"name": "John}. Oprava: pridajte chýbajúcu uzatváraciu úvodzovku.
  • Jednoduché úvodzovky: {'name': 'John'}. Oprava: použite dvojité úvodzovky.
  • undefined, NaN alebo Infinity: žiadna z týchto hodnôt nie je v JSON platná. Použite null alebo reťazec.

Častým zdrojom týchto chýb je skopírovanie objektu priamo z konzoly prehliadača alebo zo serverového denníka, ktoré často obsahujú syntax špecifickú pre JavaScript a pred platnosťou v JSON ju treba upraviť.

Kedy použiť formátovač JSON

Formátovače JSON sa najčastejšie používajú na kontrolu odpovedí rozhraní API, ktoré sa zvyčajne odosielajú v minifikovanom tvare, aby sa šetrila prenosová kapacita. Používajú sa aj na manuálnu kontrolu konfiguračných súborov, napríklad package.json alebo composer.json, na čítanie údajov skopírovaných z lokálneho úložiska alebo konzoly prehliadača a na pochopenie štruktúry súboru údajov prijatého z iného systému.

Ďalšie spôsoby formátovania JSON

  • Vývojárske nástroje prehliadačov: Chrome, Edge a Firefox formátujú odpovede JSON automaticky v paneli náhľadu na karte Sieť.
  • Editory kódu: Visual Studio Code formátuje otvorený súbor JSON pomocou Alt+Shift+F (na Macu Shift+Option+F). Väčšina editorov má ekvivalentnú klávesovú skratku alebo rozšírenie na formátovanie.
  • Príkazový riadok: jq (jq . file.json) aj vstavaný nástroj Pythonu python -m json.tool file.json formátujú JSON v termináli.

Začlenenie formátovania JSON do kódu

Väčšina programovacích jazykov obsahuje knižnicu JSON s možnosťou nastavenia odsadenia. V JavaScripte:

1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2

V Pythone:

1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3

Oba prístupy analyzujú text do natívnej dátovej štruktúry a potom ho znova serializujú s medzerami. Napísať to je jednoduché, ale čísla sa môžu zmeniť. JavaScript ukladá každé číslo ako číslo s dvojitou presnosťou, takže 9007199254740993 sa vráti ako 9007199254740992. Python zachováva celé čísla presne, pretože celé čísla v Pythone nemajú obmedzenie veľkosti, ale stále prepíše 1.0e2 na 100.0 a zmení 1e999 na Infinity, čo nie je platný JSON. Aplikácie, ktoré potrebujú presné veľké celé čísla, napríklad identifikátory databáz, ich často ukladajú v JSON ako reťazce, nie ako čísla.

Stručná história JSON

Douglas Crockford špecifikoval JSON na začiatku rokov 2000. Jeho syntax vychádzala zo syntaxe objektových literálov JavaScriptu, no formát bol použiteľný v akomkoľvek jazyku. RFC 4627 ho formalizovalo v roku 2006. Rýchlo sa rozšíril, pretože sa zapisoval stručnejšie než XML a priamo sa mapoval na objekty JavaScriptu, čo bolo dôležité v čase, keď webové aplikácie začali načítavať údaje na pozadí namiesto opätovného načítania celých stránok. Do 2010-tych rokov sa stal predvoleným formátom pre REST API a databázy, ako je MongoDB.

Najčastejšie otázky

Čo je formátovač JSON? Nástroj, ktorý pridáva do textu JSON odsadenie, zalomenia riadkov a medzery, aby sa jeho štruktúra ľahko čítala bez zmeny údajov.

Mení formátovanie údaje? Nie. Formátovanie mení iba biele znaky. Tento nástroj kopíruje každý reťazec a číslo presne tak, ako boli zadané, takže hodnoty v naformátovanom výstupe sa presne zhodujú so vstupom vrátane čísel, ktoré sú príliš veľké na presné uloženie ako číslo JavaScriptu.

Prečo sa zobrazuje chyba „Invalid JSON“? Vstup porušuje pravidlo JSON. Bežnými príčinami sú názvy vlastností bez úvodzoviek, koncová čiarka, jednoduché úvodzovky, neuzavretý reťazec alebo nesprávne spárované zátvorky. Tento nástroj nezobrazuje presnú pozíciu problematického znaku; kontrola vstupu podľa vyššie uvedených pravidiel ju zvyčajne rýchlo odhalí.

Môže JSON obsahovať komentáre? Nie. Špecifikácia ich nepovoľuje. Formáty ako JSONC a JSON5 pridávajú podporu komentárov nad syntax JSON pre prípady, keď je to užitočné, napríklad v konfiguračných súboroch.

Aké je štandardné odsadenie JSON? Najbežnejšou konvenciou vo webovom vývoji sú dve medzery a používa ich aj tento nástroj. Niektoré príručky štýlu používajú namiesto toho štyri medzery alebo tabulátory; samotná špecifikácia JSON nevyžaduje žiadne konkrétne odsadenie.

Aký je rozdiel medzi JSON.parse() a JSON.stringify()? JSON.parse() prevedie reťazec JSON na hodnotu JavaScriptu. JSON.stringify() robí opak: prevedie hodnotu JavaScriptu na reťazec JSON a prijíma argument pre odsadenie pri skrášľovanom výpise. Tento nástroj nepoužíva interne ani jednu z týchto funkcií, vďaka čomu dokáže presne zachovať veľké celé čísla.

Referencie

  1. RFC 8259 — Formát výmeny údajov JavaScript Object Notation (JSON)
  2. MDN Web Docs: JSON
  3. json.org