Sari la conținut

Formatator JSON: Înfrumusețare și Validare JSON Online Gratuit

Formatează JSON minimizat instant cu indentare corespunzătoare. Formatator JSON online gratuit validează sintaxa, înfrumusețează codul și accelerează depanarea. Funcționează în browser cu formatare în timp real.

Formatator JSON

Formatează și înfrumusețează JSON-ul tău cu acest instrument simplu - formatarea se întâmplă automat pe măsură ce tastezi!

JSON-ul formatat va apărea aici automat...

Calculator de încărcare...
📚

Documentație

Ce este un instrument de formatare JSON?

Un formatator JSON este un instrument care preia text JSON (JavaScript Object Notation) și îl reformatează cu indentare și treceri la rând nou, fără a modifica datele propriu-zise. JSON este un format de text simplu pentru stocarea și transmiterea datelor structurate, construit din perechi nume/valoare și liste. Programele economisesc de obicei spațiu prin eliminarea tuturor spațiilor albe suplimentare, ceea ce produce o singură linie densă, greu de citit de către o persoană. Un formatator, numit și instrument de înfrumusețare sau de afișare lizibilă, adaugă acele spații albe înapoi într-un mod consecvent, astfel încât structura să fie vizibilă. Acest instrument formatează automat JSON-ul pe măsură ce este introdus sau lipit. Nu există un buton de formatare; rezultatul se actualizează la fiecare apăsare de tastă. Un buton de resetare șterge intrarea, iar un buton de copiere copiază rezultatul formatat.

Regulile sintaxei JSON

JSON este definit printr-o specificație numită RFC 8259. Aceasta are două tipuri de containere:

Obiectele conțin perechi nume/valoare între acolade:

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

Array-urile conțin liste ordonate între paranteze drepte:

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

O valoare JSON trebuie să fie de unul dintre cele șase tipuri: șir de caractere, număr, valoare booleană (true sau false), null, obiect sau tablou.

Câteva reguli cauzează majoritatea erorilor:

  • Numele proprietăților trebuie încadrate între ghilimele duble. {name: "John"} este invalid; forma corectă este {"name": "John"}.
  • Șirurile de caractere trebuie să folosească ghilimele duble, nu ghilimele simple.
  • O virgulă nu poate urma ultimului element dintr-un obiect sau tablou (nu sunt permise virgulele finale).
  • JSON nu are sintaxă pentru comentarii, chiar dacă aspectul său cu acolade și paranteze drepte provine din JavaScript.
  • JSON nu are undefined. Folosiți null pentru o valoare lipsă.

O greșeală frecventă este lipirea unui literal de obiect JavaScript în locul unui obiect JSON. {name: 'John', age: undefined} este valid JavaScript, dar nu este JSON valid. Varianta JSON este {"name": "John", "age": null}.

Cum funcționează acest formatter JSON

Multe formattere JSON trec textul prin JSON.parse() pentru a construi un obiect JavaScript, apoi folosesc JSON.stringify() pentru a-l transforma din nou în text cu spațiere. Această conversie dus-întors are un efect secundar: numerele JavaScript sunt numere în virgulă mobilă cu precizie dublă IEEE 754, care nu pot reprezenta exact fiecare număr întreg după ce depășesc 2^53 − 1 (9,007,199,254,740,991). Un identificator precum 9007199254740993 poate deveni 9007199254740992 după această conversie dus-întors.

Acest instrument evită etapa respectivă. El citește intrarea caracter cu caracter cu ajutorul unui parser mic, scris manual, iar în loc să convertească fiecare număr sau șir într-o valoare JavaScript, copiază exact acea bucată de text așa cum a fost scrisă, apoi o plasează la nivelul corect de indentare. Deoarece numerele nu sunt niciodată convertite în valori în virgulă mobilă, numerele întregi de orice dimensiune își păstrează cifrele exacte. Dacă un obiect are aceeași cheie scrisă de două ori, ambele copii sunt păstrate la locul lor, în loc să fie reduse la ultima, așa cum s-ar întâmpla la construirea unui obiect JavaScript.

Procesul, pas cu pas:

  1. Citește următorul token (un obiect, tablou, șir de caractere, număr, true, false sau null).
  2. Verifică tokenul în raport cu gramatica JSON. Respinge-l dacă încalcă o regulă, de exemplu dacă are o cheie fără ghilimele sau o virgulă finală.
  3. Copiază textul tokenului neschimbat în rezultat.
  4. Adaugă o întrerupere de linie și indentează cu 2 spații pentru fiecare nivel de imbricare dintr-un obiect sau tablou. Un obiect sau tablou gol rămâne pe o singură linie, ca {} sau [].
  5. Repetă până când întreaga intrare a fost citită.

Indentarea este fixată la 2 spații; nu există o setare pentru modificarea ei. Cât timp caseta de intrare este goală, panoul de rezultate afișează textul substituent „Formatted JSON will appear here automatically...”. Dacă intrarea încalcă o regulă JSON, instrumentul afișează mesajul „Invalid JSON: Please check your input”, nu un mesaj tehnic al parserului cu poziția exactă a caracterului. În schimb, funcția integrată în browsere, JSON.parse(), indică poziția caracterului în textul erorii.

Exemplu de calcul

Această intrare minimizată:

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

devine:

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

Fiecare obiect sau tablou imbricat este indentat cu un nivel mai mult decât părintele său, astfel încât relația dintre address și cele trei câmpuri ale sale este vizibilă dintr-o privire.

Un al doilea exemplu arată de ce este importantă copierea literalelor. Această intrare:

1{"id":9007199254740993}
2

este formatată astfel:

1{
2  "id": 9007199254740993
3}
4

Cifrele rămân exact așa cum au fost introduse. Un formatter bazat pe JSON.parse() urmat de JSON.stringify() ar transforma în tăcere acel număr în 9007199254740992.

Erori JSON frecvente

  • Nume de proprietate fără ghilimele: {name: "John"}. Remediere: {"name": "John"}.
  • Virgulă finală: {"age": 30,}. Remediere: eliminați virgula dinaintea acoladei de închidere.
  • Paranteze nepotrivite: {"data": [1, 2}. Remediere: închideți tabloul cu ] înainte de a închide obiectul.
  • Șir de caractere neînchis: {"name": "John}. Remediere: adăugați ghilimeaua de închidere lipsă.
  • Ghilimele simple: {'name': 'John'}. Remediere: folosiți ghilimele duble.
  • undefined, NaN sau Infinity: niciuna dintre acestea nu este o valoare JSON validă. Folosiți null sau un șir de caractere.

O sursă frecventă a acestor erori este copierea unui obiect direct din consola unui browser sau dintr-un jurnal al unui server, care include adesea sintaxă specifică JavaScript-ului și care trebuie curățată înainte de a deveni JSON valid.

Când se folosește un formatter JSON

Formatterele JSON sunt folosite cel mai des pentru inspectarea răspunsurilor API, care sunt de obicei trimise în formă minimizată pentru economisirea lățimii de bandă. Ele sunt folosite și pentru verificarea manuală a fișierelor de configurare precum package.json sau composer.json, pentru citirea datelor copiate din stocarea locală sau consola unui browser și pentru înțelegerea structurii unui set de date primit de la un alt sistem.

Alte modalități de formatare a JSON-ului

  • Instrumentele pentru dezvoltatori ale browserului: Chrome, Edge și Firefox formatează automat răspunsurile JSON în panoul de previzualizare din fila Network.
  • Editoare de cod: Visual Studio Code formatează un fișier JSON deschis cu Alt+Shift+F (Shift+Option+F pe Mac). Majoritatea editoarelor au o comandă rapidă echivalentă sau o extensie de formatare.
  • Linia de comandă: jq (jq . file.json) și instrumentul integrat în Python python -m json.tool file.json formatează ambele JSON-ul dintr-un terminal.

Integrarea formatării JSON în cod

Majoritatea limbajelor de programare includ o bibliotecă JSON cu o opțiune de indentare. În JavaScript:

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

În Python:

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

Ambele abordări analizează textul într-o structură de date nativă, apoi îl serializează din nou cu spațiere. Este simplu de scris, dar poate modifica numerele. JavaScript stochează fiecare număr ca număr în virgulă mobilă cu precizie dublă, astfel încât 9007199254740993 revine ca 9007199254740992. Python păstrează numerele întregi exact, deoarece numerele întregi Python nu au o limită de dimensiune, dar rescrie totuși 1.0e2 ca 100.0 și transformă 1e999 în Infinity, ceea ce nu este JSON valid. Aplicațiile care au nevoie de numere întregi mari exacte, precum identificatorii bazelor de date, le stochează adesea ca șiruri de caractere în JSON, nu ca numere.

O scurtă istorie a JSON-ului

Douglas Crockford a definit JSON la începutul anilor 2000, pornind de la sintaxa literalelor de obiect JavaScript, dar făcându-l utilizabil din orice limbaj. RFC 4627 l-a oficializat în 2006. S-a răspândit rapid deoarece era mai scurt de scris decât XML și corespundea direct obiectelor JavaScript, lucru important pe măsură ce aplicațiile web au început să preia date în fundal în loc să reîncarce pagini întregi. În anii 2010 devenise formatul implicit pentru API-urile REST și pentru baze de date precum MongoDB.

Întrebări frecvente

Ce este un formatter JSON? Un instrument care adaugă indentare, întreruperi de linie și spațiere textului JSON, astfel încât structura sa să fie ușor de citit, fără a modifica datele.

Formatarea modifică datele? Nu. Formatarea modifică doar spațiile albe. Acest instrument copiază fiecare șir de caractere și număr exact așa cum au fost introduse, astfel încât valorile din rezultatul formatat corespund precis intrării, inclusiv numerele prea mari pentru a fi stocate exact ca număr JavaScript.

De ce primesc o eroare „Invalid JSON”? Intrarea încalcă o regulă JSON. Printre cauzele frecvente se numără numele de proprietă fără ghilimele, o virgulă finală, ghilimelele simple, un șir neînchis sau o paranteză necorespunzătoare. Acest instrument nu afișează poziția exactă a caracterului problematic; verificarea intrării în raport cu regulile de mai sus îl identifică de obicei rapid.

Poate JSON să conțină comentarii? Nu. Specificația nu le permite. Formate precum JSONC și JSON5 adaugă suport pentru comentarii peste sintaxa JSON, în situațiile în care acest lucru este util, de exemplu în fișierele de configurare.

Care este indentarea standard pentru JSON? Două spații reprezintă convenția cea mai frecventă în dezvoltarea web și sunt folosite de acest instrument. Unele ghiduri de stil folosesc în schimb patru spații sau tabulatoare; specificația JSON nu impune o anumită indentare.

Care este diferența dintre JSON.parse() și JSON.stringify()? JSON.parse() transformă un șir JSON într-o valoare JavaScript. JSON.stringify() face operația inversă, transformând o valoare JavaScript într-un șir JSON, și acceptă un argument de indentare pentru afișarea formatată. Acest instrument nu folosește intern niciuna dintre aceste funcții, ceea ce îi permite să păstreze exact numerele întregi mari.

Referințe

  1. RFC 8259 — Formatul de schimb de date JavaScript Object Notation (JSON)
  2. MDN Web Docs: JSON
  3. json.org