Greșelile JSON din spatele erorilor de parsare și cum le repari
Majoritatea erorilor de parsare JSON vin dintr-o listă scurtă de greșeli: o virgulă de final, un șir între ghilimele simple, un comentariu, o cheie fără ghilimele, o valoare precum NaN sau undefined sau ghilimele curbate copiate dintr-un document. JSON este mai strict decât JavaScript, pe care îl seamănă, așa că un cod care arată corect pentru un om poate fi respins de un parser. Mesajul de eroare indică un rând și o coloană, iar remedierea se află de obicei chiar în acel loc sau imediat înainte.
Formatează JSONJSON-ul nu se parseazăÎncearcă gratuitRegulile pe care le impune JSON
Un document JSON este o singură valoare: un obiect între acolade, un tablou între paranteze pătrate, un șir, un număr, true, false sau null. În interiorul acestora:
- Fiecare cheie și fiecare șir folosesc ghilimele drepte duble, ca în "name".
- Virgulele separă elementele, iar după ultimul element dintr-un obiect sau tablou nu trebuie să existe nicio virgulă.
- Numerele nu pot avea semnul plus în față, iar NaN, Infinity și undefined nu sunt numere sau valori valide.
- Comentariile nu sunt permise deloc.
- Cheile trebuie să fie șiruri, deci o cheie fără ghilimele, precum name:, este invalidă.
Unele parsere acceptă câteva dintre acestea implicit, iar unele instrumente acceptă JSON cu comentarii, ca o comoditate. Această toleranță ascunde problema până când fișierul ajunge la un cititor mai strict, așa că scrie forma strictă.
Citirea mesajului de eroare
Parserele raportează primul loc în care nu au mai putut continua. Mesajul numește problema și dă o poziție, de obicei un rând și o coloană. Iată un fișier mic cu o virgulă de final într-un tablou și încă una după ultima proprietate:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python raportează asta ca "Illegal trailing comma before end of array: line 3 column 20". Formularea diferă între instrumente, iar unele parsere mai vechi spun doar "Unexpected token" cu un decalaj de caractere. Mergi la poziția raportată, apoi uită-te la caracterul de dinaintea ei. Greșeala reală este adesea o virgulă, o ghilimea sau o acoladă cu unu sau două caractere mai devreme decât locul indicat.
Câteva mesaje în plus, de la parserul Python, și ce înseamnă de obicei:
- "Expecting property name enclosed in double quotes" pentru '{'a': 1}' înseamnă o cheie cu ghilimele simple sau fără ghilimele.
- "Expecting value" la o poziție unde te aștepți la un număr sau un șir înseamnă adesea o ghilimea curbată, pentru că parserul o vede ca pe un caracter necunoscut.
- "Expecting ',' delimiter" înseamnă de obicei o virgulă lipsă între două elemente sau un comentariu în mijlocul datelor.
Ghilimele curbate și text copiat
Ghilimelele curbate sunt cel mai derutant caz, pentru că arată aproape la fel ca cele drepte. Un fișier JSON copiat dintr-un procesor de text, dintr-o pagină web sau dintr-un mesaj de chat poate conține ghilimele duble curbate. Fișierul ți se pare corect și nu poate fi parsat, pentru că parserul vede “x” ca pe un caracter necunoscut, nu ca pe un delimitator de șir.
Caracterele ascunse produc același tip de problemă. Un spațiu fără întrerupere între două valori nu este spațiu alb pentru parser. Elimină caractere ascunse înainte să încerci să repari structura manual, apoi repară ghilimelele. Ghidul pentru ghilimelele curbate explică cum le îndrepți în siguranță.
Ghilimele simple, comentarii și chei fără ghilimele
Mulți dezvoltatori scriu date asemănătoare JSON într-un limbaj care permite mai mult:
- Ghilimelele simple sunt valide în literali JavaScript și Python, dar JSON cere ghilimele duble. Înlocuiește {'a': 1} cu {"a": 1}.
- Comentariile precum
//sau/* */trebuie eliminate. Dacă ai nevoie de notițe, pune-le într-un câmp separat sau folosește un format conceput pentru fișiere de configurare. - Cheile fără ghilimele sunt frecvente în obiectele literale JavaScript. Adaugă ghilimelele.
- NaN și undefined nu sunt JSON. Folosește null pentru o valoare lipsă sau un șir, dacă valoarea este text.
Fii atent la o înlocuire globală. Schimbarea fiecărei ghilimele simple în ghilimea dublă strică orice șir care conține un apostrof, precum "Ada's notes". Previzualizează fiecare potrivire în Găsire și înlocuire mai întâi, ca să vezi ce ghilimele s-ar schimba.
Repară structura pas cu pas
- Lipește fișierul în Formatează JSON. Formatarea face structura vizibilă, iar eroarea arată rândul și coloana. Apoi apasă Repară, care elimină comentariile și virgulele de final. Nu schimbă ghilimelele simple sau curbate, așa că pe acestea le corectezi tu.
- Corectează doar prima eroare, apoi verifică din nou. O singură greșeală poate produce mai multe erori mai jos.
- Verifică dacă fiecare acoladă sau paranteză deschisă are una de închidere și dacă imbricarea este cea pe care o vrei.
- Validează fișierul final cu parserul pe care îl folosește aplicația ta, nu doar cu un instrument web. Parserele diferă ușor.
Un fișier care se parsează nu este neapărat fișierul pe care l-ai vrut. Verifică-l cu un JSON Schema ca să prinzi un câmp lipsă sau o valoare de tip greșit, sau compară două documente JSON ca să vezi ce s-a schimbat între versiuni.
Cazuri speciale
- Virgule de final în fișierele generate. Unele instrumente le scriu. Dacă produci JSON construind șiruri manual, folosește serializatorul limbajului tău, care scrie ieșire validă.
- Chei duplicate. JSON le permite, dar majoritatea parserelor păstrează doar ultima valoare. Cheile duplicate sunt o eroare care așteaptă să se întâmple.
- Numere mari. Numerele întregi foarte mari pot pierde precizie în unele parsere, așa că stochează identificatorii ca șiruri dacă sunt mai lungi decât poate reprezenta exact parserul. Ghidul de la CSV la JSON spune același lucru despre ID-uri.
Răspunsuri rapide
De ce JSON-ul meu eșuează când arată corect?
Cauzele obișnuite sunt o virgulă de final, ghilimele simple, un comentariu sau ghilimele curbate copiate dintr-un document. Verifică poziția din mesajul de eroare și caracterul de dinaintea ei.
Poate JSON să aibă comentarii?
Nu. Standardul JSON nu permite comentarii. Elimină-le sau mută notițele într-un câmp separat. Butonul Repară din formatator le elimină pentru tine.
Ce ar trebui să folosesc în loc de undefined în JSON?
Folosește null când o valoare lipsește intenționat sau omite cheia complet. undefined este o valoare JavaScript și nu are reprezentare în JSON.
Tradus din Original în engleză cu ajutorul AI.
Comentarii
Încă nu sunt comentarii. Fii primul.


