Validarea sintaxei unui JSON
- Panou de control
- Documentație
- API
La ce servește un validator JSON?
Un validator JSON are un rol mai modest, dar mai precis, decât un formatator: nu rescrie nimic. Ia un șir și răspunde la o întrebare binară: este acest text un JSON conform cu RFC 8259? Dacă da, instrumentul predă mâna. Dacă nu, indică exact linia, coloana și un extras al JSON-ului în jurul problemei, pentru a ajuta dezvoltatorul să corecteze imediat.
În practică, este instrumentul pe care îl utilizezi imediat ce un parser undeva returnează un mesaj de eroare
criptic de genul SyntaxError: Unexpected token } in JSON at position 217. În loc să
numeri caracterele manual într-un editor, lipești șirul complet, citești poziția și vezi
extrasul greșit.
Validare, formatare: două operații distincte
Adesea se confundă cele două. Formatatorul nostru JSON ia JSON valid și
îl rescrie cu o indentare lizibilă. Validatorul, el, se mulțumește cu un verdict sintactic.
Nu efectuează validare semantică: nu știe dacă valoarea unui câmp email
seamănă cu un email, nici dacă structura corespunde unei scheme JSON Schema. Pentru aceasta, se utilizează
instrumente dedicate (ajv în Node, justinrainbow/json-schema în PHP).
Înlănțuirea clasică în debug este: validează mai întâi (instrumentul indică eroarea de sintaxă), formatează apoi (payload-ul devenit acum valid devine lizibil), compară în final cu un alt payload de referință prin comparatorul nostru JSON.
Cele mai frecvente erori JSON
- Virgulă de sfârșit (trailing comma):
{"a": 1, "b": 2,}. Tolerată de JavaScript, ECMAScript și JSON5; refuzată de JSON pur. Este eroarea nr. 1 când se copiază din un editor de cod. - Apostrofuri în loc de ghilimele duble:
{'a': 1}este invalid. JSON acceptă doar ghilimele duble, în jurul cheilor ca și al valorilor șir. - Chei necitate:
{a: 1}, sintaxă JavaScript validă dar JSON invalidă. - Caractere de control neescapate într-un șir: un salt de linie brut, un
tab. JSON cere
\n,\t,\r. - Comentarii:
// comentariusau/* */. Acceptate în JSONC (config VS Code) sau JSON5, refuzate în JSON pur. - Codare incorectă: un BOM UTF-8 la începutul fișierului, conținut în latin-1 prost convertit. Validatorul returnează adesea un mesaj generic pentru aceste cazuri.
- Structură neterminată: un
{sau[fără închidere, frecvent când se trunchează un payload la copiere-lipire.
Cum localizează validatorul eroarea
Instrumentul utilizează json_decode() din PHP cu flagul JSON_THROW_ON_ERROR. PHP
returnează un mesaj care conține o poziție în octeți (poziție 217), pe care o convertim într-un
cuplu linie/coloană numărând salturile de linie înainte de offset. Un extras de aproximativ 80 de caractere este
apoi tăiat în jurul poziției pentru a da context. Este în general suficient pentru a identifica
eroarea: un ghilimel prost plasat, o virgulă în plus, o paranteză lipsă.
Atenție: poziția raportată de PHP nu este întotdeauna exact caracterul greșit. Este
adesea după eroare, în momentul în care parser-ul a renunțat. Dacă extrasul arată "name":
"Alice", }, eroarea reală este virgula, nu acolada.
Cazuri de utilizare tipice
- Configurație coruptă:
composer.json,package.json,tsconfig.jsoncare împiedică un build să demareze. Se lipește, se vede linia, se corectează. - Răspuns API trunchiat: un proxy a tăiat payload-ul. Structura nu este terminată, validatorul o semnalează.
- Payload de webhook: un serviciu terț trimite JSON prost format. Validatorul permite constatarea problemei pe partea emițătorului fără a te scufunda în codul aplicației.
- JSON construit prin concatenare: practică de evitat dar curentă, mai ales în bash sau în SQL. Validatorul dezvăluie ghilimelele duble neescapate.
Limitele instrumentului
Validatorul nu efectuează validare contra unei scheme. Nu spune că lipsește câmpul
email, că valoarea nu este un întreg sau că tabelul așteptat nu are lungimea potrivită.
Pentru aceste verificări structurale, se utilizează JSON Schema. Validatorul nu corectează nici
JSON-ul: nu încearcă să adauge o acoladă lipsă, nici să elimine o virgulă în plus. Este o alegere
: corecția automată maschează prea des erori reale.
Întrebări frecvente
Care este diferența cu un linter?
Un linter merge mai departe: verifică și reguli de stil (alfabetic, convenții de numire), detectează valori duplicate, sugerează îmbunătățiri. Validatorul rămâne la conformitatea sintactică.
JSON-ul meu este valid, dar aplicația mea îl respinge?
Verifică codarea (UTF-8 fără BOM), dimensiunea limită pe partea serverului, tipurile așteptate. Un JSON sintactic corect poate totuși să nu corespundă schemei aplicative.
Păstrează validatorul JSON-ul meu?
Nu. Procesarea este sincronă pe partea serverului, fără persistență. Pentru date foarte sensibile,
preferă totuși o validare locală prin jq sau un script PHP.
Exemplu de cerere
curl -X POST https://cdrn.fr/api/v1/tools/json-validator/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Schema de intrare
| Câmp | Tip | Obligatoriu | Implicit |
|---|---|---|---|
input |
text | ✓ | – |
Puncte de acces
GET https://cdrn.fr/api/v1/tools- listează toate instrumentele disponibileGET https://cdrn.fr/api/v1/tools/json-validator- obține schema acestui instrumentPOST https://cdrn.fr/api/v1/tools/json-validator/execute- execută acest instrument cu un payload JSON