JSON-feilene bak de fleste parsefeil, og hvordan du retter dem
De fleste JSON-parsefeil kommer fra en kort liste med feil: et komma etter siste element, en streng i enkle anførselstegn, en kommentar, en nøkkel uten anførselstegn, en verdi som NaN eller undefined, eller krøllete anførselstegn kopiert fra et dokument. JSON er strengere enn JavaScriptet den minner om, så kode som ser riktig ut for et menneske, kan bli avvist av en parser. Feilmeldingen peker på en linje og en kolonne, og rettingen ligger vanligvis på eller rett før det stedet.
Formater JSONJSON lar seg ikke tolkeGjør det gratisReglene JSON håndhever
Et JSON-dokument er én verdi: et objekt i klammeparenteser, en array i hakeparenteser, en streng, et tall, true, false eller null. Inne i disse verdiene:
- Alle nøkler og alle strenger bruker rette doble anførselstegn, for eksempel "name".
- Komma skiller elementer, og det må ikke stå noe komma etter siste element i et objekt eller en array.
- Tall kan ikke ha et foranstilt plusstegn, og NaN, Infinity og undefined er ikke gyldige tall eller verdier.
- Kommentarer er ikke tillatt i det hele tatt.
- Nøkler må være strenger, så en nøkkel uten anførselstegn, for eksempel name:, er ugyldig.
Noen parsere godtar noen av disse som standard, og noen verktøy godtar JSON med kommentarer for bekvemmelighetens skyld. Den toleransen skjuler problemet til filen når en strengere leser, så skriv den strenge formen.
Å lese feilmeldingen
Parsere rapporterer det første stedet der de ikke kunne fortsette. Meldingen forteller hva som er galt og gir en posisjon, vanligvis en linje og en kolonne. Her er en liten fil med et komma etter siste element i en array og et til etter siste egenskap:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python rapporterer dette som «Illegal trailing comma before end of array: line 3 column 20». Formuleringen varierer mellom verktøy, og noen eldre parsere sier bare «Unexpected token» med en tegnposisjon. Gå til posisjonen som er angitt, og se på tegnet rett før den. Den egentlige feilen er ofte et komma, et anførselstegn eller en klamme ett eller to tegn tidligere enn det angitte stedet.
Noen flere meldinger fra Pythons parser, og hva de vanligvis betyr:
- «Expecting property name enclosed in double quotes» for '{'a': 1}' betyr at det er en nøkkel i enkle anførselstegn eller uten anførselstegn.
- «Expecting value» på en posisjon der du forventet et tall eller en streng, betyr ofte et krøllete anførselstegn, siden parseren ser det som et ukjent tegn.
- «Expecting ',' delimiter» betyr vanligvis at et komma mangler mellom to elementer, eller at det står en kommentar midt i dataene.
Krøllete anførselstegn og kopiert tekst
Krøllete anførselstegn er det mest forvirrende tilfellet, fordi de nesten ser ut som rette anførselstegn. En JSON-fil kopiert fra et tekstbehandlingsprogram, en nettside eller en chatmelding kan inneholde krøllete doble anførselstegn. Filen ser riktig ut for deg og feiler ved parsing, fordi parseren ser “x” som et ukjent tegn i stedet for som et strengskille.
Skjulte tegn gir samme type feil. Et hardt mellomrom mellom to verdier er ikke vanlig mellomrom for parseren. Fjern skjulte tegn før du prøver å reparere strukturen for hånd, og rett deretter anførselstegnene. Veiledningen om krøllete anførselstegn forklarer hvordan du trygt retter dem.
Enkle anførselstegn, kommentarer og nøkler uten anførselstegn
Mange utviklere skriver JSON-lignende data i et språk som tillater mer:
- Enkle anførselstegn er gyldige i JavaScript- og Python-literaler, men JSON krever doble anførselstegn. Bytt {'a': 1} med {"a": 1}.
- Kommentarer som
//eller/* */må fjernes. Trenger du notater, legg dem i et eget felt, eller bruk et format laget for konfigurasjonsfiler. - Nøkler uten anførselstegn er vanlige i JavaScript-objektliteraler. Legg til anførselstegnene.
- NaN og undefined er ikke JSON. Bruk null for en manglende verdi, eller en streng hvis verdien er tekst.
Vær forsiktig med en generell søk-og-erstatt. Hvis du endrer alle enkle anførselstegn til doble, ødelegges alle strenger som inneholder en apostrof, for eksempel "Ada's notes". Gå gjennom hvert treff i søk og erstatt først, slik at du ser hvilke anførselstegn som ville endres.
Rett strukturen steg for steg
- Lim inn filen i JSON-formateringsverktøyet. Formatering gjør strukturen synlig, og feilen viser linje og kolonne. Trykk deretter på Reparer, som fjerner kommentarer og etterfølgende komma. Den endrer ikke enkle eller krøllete anførselstegn, så rett dem selv.
- Rett bare den første feilen, og kontroller på nytt. Én feil kan gi flere feil lenger ned.
- Kontroller at hver åpnende klamme eller hakeparentes har en avsluttende, og at nøstingen er slik du mente.
- Valider den ferdige filen med parseren applikasjonen din bruker, ikke bare med et nettverktøy. Parsere er litt forskjellige.
En fil som parser, er ikke nødvendigvis filen du mente. Kontroller den mot et JSON Schema for å fange et manglende felt eller en verdi med feil type, eller sammenlign to JSON-dokumenter for å se hva som endret seg mellom versjonene.
Spesialtilfeller
- Etterfølgende komma i genererte filer. Noen verktøy skriver dem. Hvis du lager JSON for hånd ved å bygge strenger, bruk serialiseringsfunksjonen i språket ditt, som skriver gyldig JSON.
- Dupliserte nøkler. JSON tillater dem, men de fleste parsere beholder bare den siste verdien. Dupliserte nøkler er en feil som bare venter på å skje.
- Store tall. Svært store heltall kan miste presisjon i noen parsere, så lagre identifikatorer som strenger hvis de er lengre enn parseren kan representere nøyaktig. Veiledningen om CSV til JSON tar opp det samme for ID-er.
Raske svar
Hvorfor feiler JSON-en min når den ser riktig ut?
De vanlige årsakene er et etterfølgende komma, enkle anførselstegn, en kommentar eller krøllete anførselstegn kopiert fra et dokument. Sjekk posisjonen i feilmeldingen og tegnet rett før den.
Kan JSON ha kommentarer?
Nei. JSON-standarden tillater ikke kommentarer. Fjern dem, eller flytt notatene til et eget felt. Knappen Reparer i formateringsverktøyet fjerner dem for deg.
Hva bør jeg bruke i stedet for undefined i JSON?
Bruk null når en verdi mangler med vilje, eller utelat nøkkelen helt. undefined er en JavaScript-verdi og har ingen JSON-representasjon.
Oversatt fra Engelsk original med KI-hjelp.
Kommentarer
Ingen kommentarer ennå. Bli den første.


