A leggyakoribb JSON-hibák, és hogyan javítsd ki őket
A JSON-elemzési hibák többsége néhány gyakori hibából ered: felesleges vessző, egyszeres idézőjelű szöveg, megjegyzés, idézőjel nélküli kulcs, olyan érték, mint a NaN vagy az undefined, vagy dokumentumból bemásolt okos idézőjelek. A JSON szigorúbb, mint a hozzá hasonló JavaScript, ezért az elemző olyan kódot is elutasíthat, amely embernek jónak tűnik. A hibaüzenet sort és oszlopot ad meg, a javítás pedig általában ezen a helyen van, vagy közvetlenül előtte.
JSON formázóA JSON nem olvasható bePróbáld ki ingyenA JSON szabályai
A JSON-dokumentum egyetlen érték: kapcsos zárójelek közötti objektum, szögletes zárójelek közötti tömb, szöveg, szám, true, false vagy null. Ezeken belül:
- Minden kulcs és szöveg egyenes dupla idézőjelet használ, például "name".
- A vesszők választják el az elemeket, és az objektum vagy tömb utolsó eleme után nem állhat vessző.
- A számok elé nem írható plusz jel, a NaN, az Infinity és az undefined pedig nem érvényes számok vagy értékek.
- Megjegyzés egyáltalán nem engedélyezett.
- A kulcsoknak szövegnek kell lenniük, így az idézőjel nélküli kulcs, például name:, érvénytelen.
Egyes elemzők alapértelmezés szerint elfogadnak néhányat ezekből, és egyes eszközök kényelmi okból megjegyzéseket is elfogadnak a JSON-ban. Ez a megengedőség addig rejti el a problémát, amíg a fájl egy szigorúbb olvasóhoz nem jut, ezért a szigorú formát írd meg.
A hibaüzenet olvasása
Az elemzők azon a helyen jelzik a hibát, ahol először nem tudtak folytatni. Az üzenet megnevezi a problémát, és megad egy pozíciót, általában sort és oszlopot. Íme egy kis fájl, amelyben a tömbben van felesleges vessző, és az utolsó tulajdonság után is van egy:
{
"name": "Ada",
"tags": ["a", "b",],
}
A Python ezt így jelzi: „Illegal trailing comma before end of array: line 3 column 20”. Az üzenet szövege eszközönként eltér, egyes régebbi elemzők pedig csak az „Unexpected token” üzenetet adják, karakter-eltolással. Menj a jelzett pozícióhoz, és nézd meg az előtte álló karaktert. A valódi hiba gyakran egy-két karakterrel a jelzett hely előtt van: vessző, idézőjel vagy zárójel.
A Python elemzőjének néhány további üzenete, és ezek általános jelentése:
- „Expecting property name enclosed in double quotes” a '{'a': 1}' esetén egyszeres idézőjeles vagy idézőjel nélküli kulcsot jelent.
- „Expecting value” olyan helyen, ahol számot vagy szöveget vártál, gyakran okos idézőjelet jelent, mert az elemző ismeretlen karakterként látja.
- „Expecting ',' delimiter” általában hiányzó vesszőt jelent két elem között, vagy megjegyzést az adatok közepén.
Okos idézőjelek és bemásolt szöveg
Az okos idézőjelek a legzavarbaejtőbbek, mert majdnem ugyanúgy néznek ki, mint az egyenes idézőjelek. Szövegszerkesztőből, weboldalról vagy chatüzenetből másolt JSON-fájl görbe dupla idézőjeleket tartalmazhat. A fájl szemmel helyesnek látszik, mégis elhasal az elemzésnél, mert az elemző a “x” jelet ismeretlen karakterként látja, nem szövegkezdő vagy -záró jelként.
A rejtett karakterek hasonló hibát okoznak. Két érték között a nem törő szóköz az elemző számára nem üres hely. Távolítsd el a rejtett karaktereket, mielőtt kézzel javítanád a szerkezetet, majd igazítsd az idézőjeleket. Az idézőjelek javításáról szóló útmutató megmutatja, hogyan egyenesítsd ki őket biztonságosan.
Egyszeres idézőjelek, megjegyzések és idézőjel nélküli kulcsok
Sok fejlesztő olyan nyelven ír JSON-szerű adatot, amely többet enged meg:
- Az egyszeres idézőjel érvényes a JavaScript- és Python-literálokban, de a JSON kettős idézőjelet kér. Cseréld le a {'a': 1}-et {"a": 1}-re.
- A megjegyzéseket, például a
//vagy/* */jeleket, törölni kell. Ha szükséged van jegyzetekre, tedd őket külön mezőbe, vagy használj konfigurációs fájloknak készült formátumot. - Az idézőjel nélküli kulcsok gyakoriak a JavaScript-objektumliterálokban. Tedd köréjük az idézőjelet.
- A NaN és az undefined nem JSON. Hiányzó érték helyett használd a null-t, ha pedig szöveg az érték, akkor szöveget.
Óvatosan használj általános keresés-csere műveletet. Ha minden egyszeres idézőjelet kettősre cserélsz, elromlik minden olyan szöveg, amely aposztrófot tartalmaz, például "Ada's notes". Előbb nézd meg minden találatot a keresés és csere eszközzel, hogy lásd, mely idézőjelek változnának.
A szerkezet javítása lépésről lépésre
- Illeszd be a fájlt a JSON formázóba. A formázás láthatóvá teszi a szerkezetet, a hiba pedig megmutatja a sort és az oszlopot. Ezután kattints a Javítás gombra, amely eltávolítja a megjegyzéseket és a felesleges vesszőket. Az egyszeres és az okos idézőjeleket nem módosítja, ezeket neked kell javítanod.
- Csak az első hibát javítsd, majd ellenőrizz újra. Egy hiba később több további hibát okozhat.
- Ellenőrizd, hogy minden nyitó kapcsos vagy szögletes zárójelhez tartozik záró, és az egymásba ágyazás azt tükrözi, amit szeretnél.
- Ellenőrizd a kész fájlt az alkalmazásod elemzőjével, ne csak webes eszközzel. Az elemzők kissé eltérhetnek.
Az elemző által elfogadott fájl nem feltétlenül az, amit szántál. Ellenőrizd JSON Schema-val, hogy kiszűrd a hiányzó mezőt vagy a rossz típusú értéket, vagy hasonlíts össze két JSON-dokumentumot, hogy lásd, mi változott a verziók között.
Szélsőséges esetek
- Felesleges vesszők generált fájlokban. Egyes eszközök ilyeneket írnak. Ha kézzel állítasz össze JSON-szöveget, használd a nyelved szerializálóját, amely érvényes kimenetet ír.
- Duplikált kulcsok. A JSON megengedi őket, de a legtöbb elemző csak az utolsó értéket tartja meg. A duplikált kulcsok későbbi hibák forrásai.
- Nagy számok. Nagyon nagy egész számok egyes elemzőkben pontosságot veszíthetnek, ezért az azonosítókat szövegként tárold, ha hosszabbak annál, amit az elemző pontosan ábrázolni tud. A CSV-ből JSON-ba útmutató ugyanezt mondja az azonosítókról.
Gyors válaszok
Miért hibás a JSON, ha helyesnek látszik?
A szokásos okok: felesleges vessző, egyszeres idézőjel, megjegyzés, vagy a dokumentumból másolt okos idézőjel. Ellenőrizd a hibaüzenetben megadott pozíciót és az előtte álló karaktert.
Lehet a JSON-ban megjegyzés?
Nem. A JSON-szabvány nem engedi meg a megjegyzéseket. Töröld őket, vagy tedd a megjegyzést külön mezőbe. A formázó Javítás gombja eltávolítja őket helyetted.
Mit használjak az undefined helyett a JSON-ban?
Használd a null-t, ha egy érték szándékosan hiányzik, vagy hagyd ki a kulcsot teljesen. Az undefined JavaScript-érték, és nincs JSON-ábrázolása.
A Angol eredeti alapján, MI segítségével fordítva.
Hozzászólások
Még nincs hozzászólás. Legyél te az első.


