JSON-felen bakom de flesta parsningsfel och hur du åtgärdar dem
De flesta JSON-parsningsfel beror på en kort lista med misstag: ett kommatecken efter sista värdet, en sträng inom enkla citattecken, en kommentar, en nyckel utan citattecken, ett värde som NaN eller undefined, eller typografiska citattecken som kopierats från ett dokument. JSON är striktare än JavaScript, som det liknar, så kod som ser riktig ut för en människa kan underkännas av en parser. Felmeddelandet pekar ut en rad och en kolumn, och lösningen finns oftast på eller strax före den platsen.
Formatera JSONJSON går inte att läsa inGör det gratisReglerna som JSON tillämpar
En JSON-fil är ett enda värde: ett objekt inom klammerparenteser, en array inom hakparenteser, en sträng, ett tal, true, false eller null. Inuti dessa värden gäller:
- Varje nyckel och varje sträng använder raka dubbla citattecken, till exempel "name".
- Kommatecken separerar objekt, och det får inte finnas något kommatecken efter sista objektet i ett objekt eller en array.
- Tal kan inte ha ett inledande plustecken, och NaN, Infinity och undefined är varken giltiga tal eller giltiga värden.
- Kommentarer är inte tillåtna alls.
- Nycklar måste vara strängar, så en nyckel utan citattecken som name: är ogiltig.
Vissa parsers accepterar några av dessa som standard, och vissa verktyg godtar JSON med kommentarer som en bekvämlighet. Den tillåtelsen döljer problemet tills filen når en striktare läsare, så skriv den strikta formen.
Så läser du felmeddelandet
Parsers rapporterar den första platsen där de inte kunde fortsätta. Meddelandet anger problemet och en position, oftast en rad och en kolumn. Här är en liten fil med ett kommatecken efter sista värdet i en array och ett till efter sista egenskapen:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python rapporterar detta som "Illegal trailing comma before end of array: line 3 column 20". Formuleringen skiljer sig mellan verktyg, och vissa äldre parsers säger bara "Unexpected token" med en teckenposition. Gå till den angivna positionen och titta sedan på tecknet precis före den. Det verkliga felet är ofta ett kommatecken, citattecken eller en klammer ett eller två tecken tidigare än den angivna platsen.
Några fler meddelanden från Pythons parser och vad de oftast betyder:
- "Expecting property name enclosed in double quotes" för '{'a': 1}' betyder att nyckeln har enkla citattecken eller saknar citattecken.
- "Expecting value" på en position där du väntade dig ett tal eller en sträng betyder ofta ett typografiskt citattecken, eftersom parsern ser det som ett okänt tecken.
- "Expecting ',' delimiter" betyder vanligtvis att ett kommatecken saknas mellan två objekt, eller att det finns en kommentar mitt i datan.
Typografiska citattecken och kopierad text
Typografiska citattecken är det mest förvirrande fallet, eftersom de nästan ser likadana ut som raka citattecken. En JSON-fil som kopierats från ett textbehandlingsprogram, en webbsida eller ett chattmeddelande kan innehålla böjda dubbla citattecken. Filen ser rätt ut för dig men går inte att tolka, eftersom parsern ser “x” som ett okänt tecken i stället för som ett avgränsningstecken för en sträng.
Dolda tecken orsakar samma typ av fel. Ett hårt blanksteg mellan två värden är inte blanksteg för parsern. Ta bort osynliga tecken innan du försöker reparera strukturen för hand, och rätta sedan citattecknen. Guiden om typografiska citattecken förklarar hur du säkert gör dem raka.
Enkla citattecken, kommentarer och nycklar utan citattecken
Många utvecklare skriver JSON-liknande data i ett språk som tillåter mer:
- Enkla citattecken är giltiga i JavaScript- och Python-literaler, men JSON kräver dubbla citattecken. Ersätt {'a': 1} med {"a": 1}.
- Kommentarer som
//eller/* */måste tas bort. Om du behöver anteckningar, lägg dem i ett eget fält eller använd ett format som är gjort för konfigurationsfiler. - Nycklar utan citattecken är vanliga i JavaScript-objektliteraler. Lägg till citattecknen.
- NaN och undefined är inte JSON. Använd null för ett saknat värde, eller en sträng om värdet är text.
Var försiktig med en generell sök och ersätt. Om du ändrar varje enkelt citattecken till ett dubbelt bryts alla strängar som innehåller ett apostrof, till exempel "Ada's notes". Granska varje träff i Sök och ersätt först, så att du ser vilka citattecken som skulle ändras.
Åtgärda strukturen steg för steg
- Klistra in filen i Formatera JSON. Formateringen gör strukturen synlig, och felet visar sin rad och kolumn. Tryck sedan på Reparera, som tar bort kommentarer och kommatecken efter sista värdet. Den ändrar inte enkla eller typografiska citattecken, så rätta dem själv.
- Åtgärda bara det första felet och kontrollera sedan igen. Ett enda misstag kan ge flera fel längre ned.
- Kontrollera att varje öppnande klammer eller hakparentes har en stängande, och att nästlingen är den du avsåg.
- Validera den slutliga filen med den parser din applikation använder, inte bara med ett webbverktyg. Parsers skiljer sig något åt.
En fil som går att tolka är inte nödvändigtvis den fil du menade. Validera den mot ett JSON Schema för att fånga ett saknat fält eller ett värde av fel typ, eller jämför två JSON-dokument för att se vad som ändrats mellan versionerna.
Specialfall
- Kommatecken efter sista värdet i genererade filer. Vissa verktyg skriver dem. Om du bygger JSON-strängar för hand, använd serialiseraren i ditt språk, som skriver giltig utdata.
- Dubbletter av nycklar. JSON tillåter dem, men de flesta parsers behåller bara det sista värdet. Dubbletter av nycklar är en bugg som bara väntar på att hända.
- Stora tal. Mycket stora heltal kan tappa precision i vissa parsers, så lagra identifierare som strängar om de är längre än vad parsern kan representera exakt. Guiden om CSV till JSON tar upp samma sak för ID:n.
Snabba svar
Varför fungerar min JSON inte när den ser rätt ut?
Vanliga orsaker är ett kommatecken efter sista värdet, enkla citattecken, en kommentar eller typografiska citattecken kopierade från ett dokument. Kontrollera positionen i felmeddelandet och tecknet precis före den.
Kan JSON ha kommentarer?
Nej. JSON-standarden tillåter inte kommentarer. Ta bort dem, eller flytta anteckningarna till ett eget fält. Knappen Reparera i formateraren tar bort dem åt dig.
Vad ska jag använda i stället för undefined i JSON?
Använd null när ett värde avsiktligt saknas, eller utelämna nyckeln helt. undefined är ett JavaScript-värde och har ingen JSON-representation.
Översatt från Engelsk original med hjälp av AI.
Kommentarer
Inga kommentarer än. Var först.


