Yleisimmät JSON-virheet ja miten korjaat ne
Useimmat JSON-jäsennysvirheet johtuvat lyhyestä joukosta virheitä: ylimääräisestä pilkusta, yksinkertaisella lainausmerkillä kirjoitetusta merkkijonosta, kommentista, lainausmerkittömästä avaimesta, arvosta kuten NaN tai undefined tai asiakirjasta kopioiduista älylainausmerkeistä. JSON on tiukempi kuin JavaScript, jota se muistuttaa, joten koodi, joka näyttää ihmisen silmään oikealta, voi jäsentäjän mielestä olla virheellinen. Virheilmoitus osoittaa rivin ja sarakkeen, ja korjaus on yleensä kohdassa tai juuri sitä ennen.
Muotoile JSONJSON ei jäsennyTee se ilmaiseksiJSONin säännöt, joita jäsentäjä noudattaa
JSON-asiakirja on yksi arvo: olio aaltosulkeissa, taulukko hakasulkeissa, merkkijono, luku, true, false tai null. Näiden arvojen sisällä:
- Jokainen avain ja jokainen merkkijono käyttää suoria kaksoislainausmerkkejä, esimerkiksi "name".
- Pilkut erottavat kohdat toisistaan, eikä olion tai taulukon viimeisen kohdan jälkeen saa olla pilkkua.
- Luvut eivät voi alkaa plus-merkillä, eikä NaN, Infinity tai undefined ole kelvollinen luku tai arvo.
- Kommentit eivät ole sallittuja lainkaan.
- Avainten täytyy olla merkkijonoja, joten lainausmerkitön avain kuten name: on virheellinen.
Jotkin jäsentäjät hyväksyvät oletuksena muutaman näistä, ja jotkin työkalut hyväksyvät kommentilliset JSON-tiedostot mukavuussyistä. Tämä joustavuus piilottaa ongelman, kunnes tiedosto päätyy tiukemmalle lukijalle, joten kirjoita tiukka muoto.
Virheilmoituksen lukeminen
Jäsentäjät ilmoittavat ensimmäisen kohdan, jossa ne eivät voineet jatkaa. Viesti kertoo ongelman ja antaa sijainnin, yleensä rivin ja sarakkeen. Tässä on pieni tiedosto, jossa on pilkku taulukon viimeisen kohdan jälkeen ja toinen pilkku viimeisen ominaisuuden jälkeen:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python ilmoittaa tämän muodossa "Illegal trailing comma before end of array: line 3 column 20". Sanamuoto vaihtelee työkalujen välillä, ja jotkin vanhemmat jäsentäjät sanovat vain "Unexpected token" ja merkkisiirtymän. Mene ilmoitettuun kohtaan ja katso merkkiä, joka on heti sen edessä. Todellinen virhe on usein pilkku, lainausmerkki tai aaltosulje, joka on yhden tai kahden merkin päässä aiemmin kuin ilmoitettu kohta.
Muutama lisää viesti Pythonin jäsentäjältä ja niiden yleinen merkitys:
- "Expecting property name enclosed in double quotes" kohdassa '{'a': 1}' tarkoittaa yksinkertaista lainausmerkkiä tai lainausmerkitöntä avainta.
- "Expecting value" kohdassa, jossa odotit lukua tai merkkijonoa, tarkoittaa usein älylainausmerkkiä, koska jäsentäjä näkee sen tuntemattomana merkkinä.
- "Expecting ',' delimiter" tarkoittaa yleensä puuttuvaa pilkkua kahden kohdan välissä tai kommenttia datan keskellä.
Älylainausmerkit ja kopioitu teksti
Älylainausmerkit ovat hankalin tapaus, koska ne näyttävät lähes samoilta kuin suorat lainausmerkit. Tekstinkäsittelyohjelmasta, verkkosivulta tai chat-viestistä kopioitu JSON-tiedosto voi sisältää kaareutuvia kaksoislainausmerkkejä. Tiedosto näyttää sinusta oikealta ja jäsentäminen epäonnistuu, koska jäsentäjä näkee “x”:n tuntemattomana merkkinä eikä merkkijonon rajana.
Piilotetut merkit aiheuttavat saman ongelman. Sitomaton välilyönti kahden arvon välissä ei ole jäsentäjälle tyhjää tilaa. Poista näkymättömät merkit ennen kuin yrität korjata rakennetta käsin, ja korjaa sen jälkeen lainausmerkit. Ohje älylainausmerkeistä kertoo, miten ne suoristetaan turvallisesti.
Yksinkertaiset lainausmerkit, kommentit ja lainausmerkittömät avaimet
Monet kehittäjät kirjoittavat JSONin kaltaista dataa kielessä, joka sallii enemmän:
- Yksinkertaiset lainausmerkit ovat sallittuja JavaScriptin ja Pythonin literaaleissa, mutta JSON vaatii kaksoislainausmerkit. Korvaa {'a': 1} muodolla {"a": 1}.
- Kommentit, kuten
//tai/* */, täytyy poistaa. Jos tarvitset huomautuksia, laita ne erilliseen kenttään tai käytä muotoa, joka on tehty asetustiedostoille. - Lainausmerkittömät avaimet ovat yleisiä JavaScriptin olioliteraaleissa. Lisää lainausmerkit.
- NaN ja undefined eivät ole JSONia. Käytä null-arvoa puuttuvalle arvolle tai merkkijonoa, jos arvo on tekstiä.
Varo kaikkien yksinkertaisten lainausmerkkien korvaamista yleisesti. Kun jokainen yksinkertainen lainausmerkki vaihdetaan kaksoislainausmerkiksi, rikki menee jokainen merkkijono, jossa on heittomerkki, kuten "Ada's notes". Esikatsele jokainen osuma ensin Etsi ja korvaa -toiminnolla, jotta näet, mitkä lainausmerkit muuttuisivat.
Korjaa rakenne vaihe vaiheelta
- Liitä tiedosto Muotoile JSON -työkaluun. Muotoilu tekee rakenteesta näkyvän, ja virhe näyttää rivin ja sarakkeen. Paina sitten Korjaa-painiketta, joka poistaa kommentit ja viimeisen kohdan jälkeiset pilkut. Se ei muuta yksinkertaisia eikä älylainausmerkkejä, joten korjaa ne itse.
- Korjaa vain ensimmäinen virhe ja tarkista uudelleen. Yksi virhe voi aiheuttaa useita virheitä alempana.
- Tarkista, että jokaisella avaavalla aaltosululla tai hakasululla on sulkeva vastine ja että sisennys on sellainen kuin aioit.
- Validoi lopullinen tiedosto sovelluksesi käyttämällä jäsentäjää, älä pelkästään verkkotyökalua. Jäsentäjät eroavat hieman toisistaan.
Tiedosto, joka jäsentyy, ei välttämättä ole se, mitä tarkoitit. Tarkista se JSON Schema -validaattorilla, jotta löydät puuttuvan kentän tai väärän tyyppisen arvon, tai vertaa kahta JSON-dokumenttia nähdäksesi, mikä muuttui versioiden välillä.
Erikoistapaukset
- Generoidut tiedostot, joissa on ylimääräisiä pilkkuja. Jotkin työkalut kirjoittavat niitä. Jos rakennat JSONin käsin merkkijonoista, käytä kielesi sarjallistusfunktiota, joka tuottaa kelvollista tulostetta.
- Toistuvat avaimet. JSON sallii ne, mutta useimmat jäsentäjät säilyttävät vain viimeisen arvon. Toistuvat avaimet ovat ongelma, joka odottaa hetkeään.
- Suuret luvut. Hyvin suuret kokonaisluvut voivat menettää tarkkuutta joissakin jäsentäjissä, joten tallenna tunnisteet merkkijonoina, jos ne ovat pidempiä kuin jäsentäjä voi esittää tarkasti. CSV–JSON-ohje esittää saman asian tunnisteista.
Pikavastaukset
Miksi JSON-tiedostoni epäonnistuu, vaikka se näyttää oikealta?
Yleisiä syitä ovat ylimääräinen pilkku, yksinkertaiset lainausmerkit, kommentti tai asiakirjasta kopioidut älylainausmerkit. Tarkista virheilmoituksen sijainti ja sitä edeltävä merkki.
Voiko JSONissa olla kommentteja?
Ei. JSON-standardi ei salli kommentteja. Poista ne tai siirrä huomautukset omaan kenttäänsä. Muotoilijan Korjaa-painike poistaa ne puolestasi.
Mitä minun pitäisi käyttää JSONissa undefinedin sijasta?
Käytä null-arvoa, kun arvo puuttuu tarkoituksella, tai jätä avain pois kokonaan. undefined on JavaScript-arvo, jolla ei ole JSON-esitystä.
Käännetty tekoälyn avulla: Englanninkielinen alkuperäisteos.
Kommentit
Ei vielä kommentteja. Ole ensimmäinen.


