Chyby v JSON, kvůli kterým se nedá načíst, a jak je opravit
Většina chyb při parsování JSON pochází z krátkého seznamu chyb: čárka na konci, řetězec v jednoduchých uvozovkách, komentář, klíč bez uvozovek, hodnota jako NaN nebo undefined, nebo kudrnaté uvozovky zkopírované z dokumentu. JSON je přísnější než JavaScript, který mu připomíná, takže kód, který člověku vypadá správně, může parser odmítnout. Chybová zpráva ukazuje řádek a sloupec a oprava bývá přímo na tomto místě nebo těsně před ním.
Formátovat JSONJSON nejde zpracovatVyzkoušet zdarmaPravidla, která JSON vyžaduje
Dokument JSON je jedna hodnota: objektve složených závorkách, pole v hranatých závorkách, řetězec, číslo, true, false nebo null. Uvnitř těchto hodnot platí:
- Každý klíč a každý řetězec používá rovné dvojité uvozovky, například "name".
- Čárky oddělují položky a za poslední položkou objektu nebo pole čárka být nesmí.
- Čísla nesmějí mít úvodní znaménko plus a NaN, Infinity a undefined nejsou platná čísla ani hodnoty.
- Komentáře nejsou povoleny vůbec.
- Klíče musí být řetězce, takže klíč bez uvozovek, například name:, je neplatný.
Některé parsery přijímají několik z těchto věcí ve výchozím nastavení a některé nástroje přijímají JSON s komentáři jako pohodlí. Tato tolerance problém skryje, dokud soubor nedorazí k přísnějšímu čtenáři, proto zapisujte přísnou podobu.
Jak číst chybovou zprávu
Parsery hlásí první místo, kde nemohly pokračovat. Zpráva pojmenuje problém a uvede pozici, obvykle řádek a sloupec. Zde je malý soubor s čárkou na konci pole a další čárkou za poslední vlastností:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python to hlásí jako „Illegal trailing comma before end of array: line 3 column 20“. Znění se mezi nástroji liší a některé starší parsery uvádějí jen „Unexpected token“ s posunem znaku. Přejděte na uvedenou pozici a podívejte se na znak těsně před ní. Skutečná chyba bývá často o jednu nebo dvě pozice dříve, tedy čárka, uvozovka nebo závorka.
Několik dalších zpráv z Pythonova parseru a co obvykle znamenají:
- „Expecting property name enclosed in double quotes“ u '{'a': 1} znamená klíč v jednoduchých uvozovkách nebo klíč bez uvozovek.
- „Expecting value“ na místě, kde jste čekali číslo nebo řetězec, často znamená kudrnatou uvozovku, protože ji parser vidí jako neznámý znak.
- „Expecting ',' delimiter“ obvykle znamená chybějící čárku mezi dvěma položkami nebo komentář uprostřed dat.
Kudrnaté uvozovky a zkopírovaný text
Typografické uvozovky jsou nejmatoucí případ, protože téměř vypadají jako rovné. Soubor JSON zkopírovaný z textového editoru, webové stránky nebo zprávy v chatu může obsahovat kudrnaté dvojité uvozovky. Soubor vám připadá správný, ale nejde načíst, protože parser vidí „x“ jako neznámý znak, a ne jako oddělovač řetězce.
Skryté znaky způsobují stejný typ selhání. Pevná mezera mezi dvěma hodnotami není pro parser bílý znak. Než se pustíte do ruční opravy struktury, odstraňte skryté znaky a potom opravte uvozovky. Průvodce kudrnatými uvozovkami vysvětluje, jak je bezpečně narovnat.
Jednoduché uvozovky, komentáře a klíče bez uvozovek
Mnoho vývojářů zapisuje data podobná JSON v jazyce, který povoluje víc:
- Jednoduché uvozovky jsou platné v literálech JavaScriptu a Pythonu, ale JSON vyžaduje dvojité. Nahraďte {'a': 1} za {"a": 1}.
- Komentáře jako
//nebo/* */je nutné odstranit. Pokud potřebujete poznámky, uložte je do samostatného pole, nebo použijte formát určený pro konfigurační soubory. - Klíče bez uvozovek jsou běžné v objektových literálech JavaScriptu. Doplňte uvozovky.
- NaN a undefined nejsou JSON. Pro chybějící hodnotu použijte null, nebo řetězec, pokud je hodnota text.
Buďte opatrní s plošným nahrazováním. Změna každé jednoduché uvozovky na dvojitou rozbije každý řetězec, který obsahuje apostrof, například „Ada's notes“. Nejprve si v Najít a nahradit prohlédněte každou shodu, abyste viděli, které uvozovky by se změnily.
Opravte strukturu krok za krokem
- Vložte soubor do Formátovat JSON. Formátování zviditelní strukturu a chyba ukáže řádek a sloupec. Potom stiskněte Opravit, které odstraní komentáře a čárky na konci. Jednoduché a kudrnaté uvozovky nemění, takže ty opravte sami.
- Opravte jen první chybu a potom znovu zkontrolujte. Jedna chyba může způsobit několik dalších níže v souboru.
- Zkontrolujte, že každá otevírací složená nebo hranatá závorka má závorku uzavírací a že vnoření odpovídá vašemu záměru.
- Hotový soubor ověřte parserem, který používá vaše aplikace, a ne jen webovým nástrojem. Parsery se mírně liší.
Soubor, který se dá načíst, není nutně soubor, jaký jste zamýšleli. Ověřte ho proti JSON Schema, abyste odhalili chybějící pole nebo hodnotu se špatným typem, nebo porovnejte dva dokumenty JSON a zjistěte, co se změnilo mezi verzemi.
Okrajové případy
- Čárky na konci v generovaných souborech. Některé nástroje je zapisují. Pokud JSON skládáte ručně z řetězců, použijte serializátor svého jazyka, který vytváří platný výstup.
- Duplicitní klíče. JSON je dovoluje, ale většina parserů ponechá jen poslední hodnotu. Duplicitní klíče jsou chyba, která jen čeká, až způsobí potíže.
- Velká čísla. Velmi velká celá čísla mohou některé parsery zaokrouhlit. Pokud jsou identifikátory delší, než parser dokáže přesně zobrazit, ukládejte je jako řetězce. Průvodce převodem CSV do JSON upozorňuje na totéž u ID.
Rychlé odpovědi
Proč můj JSON selže, i když vypadá správně?
Obvyklé příčiny jsou čárka na konci, jednoduché uvozovky, komentář nebo kudrnaté uvozovky zkopírované z dokumentu. Zkontrolujte pozici v chybové zprávě a znak těsně před ní.
Může JSON obsahovat komentáře?
Ne. Standard JSON komentáře nepovoluje. Odstraňte je, nebo přesuňte poznámky do samostatného pole. Tlačítko Opravit ve formátovači je odstraní za vás.
Co použít místo undefined v JSON?
Když hodnota chybí záměrně, použijte null, nebo klíč úplně vynechejte. undefined je hodnota JavaScriptu a v JSON nemá zápis.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


