Expected property name or '}' in JSON at position N (line L column C)
Il parser ha aperto un oggetto e si aspettava o una chiave tra virgolette doppie o la graffa di chiusura. Ha ricevuto altro. Nei dati reali quell’altro è quasi sempre un apice singolo o un identificatore nudo, il che significa che il testo è il repr di un dict Python o un literal di oggetto JavaScript, non JSON.
Incolla il tuo JSON e vedi esattamente dove si rompe
Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso
Che cosa lo provoca davvero
In ordine di quanto spesso ciascuno si rivela essere la risposta.
-
01 Chiavi tra apici singoli, da un dict Python stampato con str()
print(mio_dict) e str(mio_dict) producono sintassi Python, non JSON: apici singoli, e True, False e None invece di true, false e null. Usa json.dumps per produrre JSON.
Si rompe
{'name': 'Priya', 'active': True}Funziona
{"name": "Priya", "active": true} -
02 Chiavi senza virgolette, da un literal di oggetto JavaScript
JavaScript ammette identificatori nudi come chiavi. JSON no, nemmeno quando la chiave sarebbe un identificatore perfettamente valido.
Si rompe
{ name: "Priya", role: "admin" }Funziona
{ "name": "Priya", "role": "admin" } -
03 Un commento dentro un file di configurazione
JSON non ha una sintassi per i commenti. Un // o un /* dentro un oggetto finisce qui.
-
04 Virgolette tipografiche arrivate da un elaboratore di testi
La correzione automatica di Word, Google Docs, Note e di vari client di chat trasforma le virgolette dritte in curve. Per un parser JSON le virgolette curve sono caratteri qualunque, non delimitatori di stringa. Il nostro validatore le nomina esplicitamente invece di segnalare un generico token inatteso.
Lo stesso errore in altri runtime
Il problema di fondo è identico; cambia solo la formulazione. Se un collega segnala uno di questi messaggi, sta guardando esattamente la stessa cosa che vedi tu.
| Python | Expecting property name enclosed in double quotes: line 1 column 2 (char 1) |
|---|---|
| Java (Jackson) | Unexpected character ('s' (code 115)): was expecting double-quote to start field name |
Domande frequenti
- Come produco JSON da un dict Python nel modo giusto?
- json.dumps(obj) restituisce una stringa JSON. str(obj) e print(obj) restituiscono sintassi Python che soltanto le somiglia. È una delle fonti più comuni di JSON non valido in circolazione.
- Posso convertire il repr di un dict Python in JSON?
- Sì. ast.literal_eval lo analizza in sicurezza in un oggetto Python, che poi puoi passare a json.dumps. Il nostro strumento di riparazione fa lo stesso lavoro nel browser, convertendo gli apici singoli e i literal True, False e None in una sola passata.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Convertilo in JSON valido