Il JSON "rotto" è un problema comune: il file sembra quasi corretto, ma un parser rifiuta di leggerlo. Spesso la causa è un prezzo incollato così com'è da un foglio di calcolo italiano.
Cause comuni di JSON non valido
- Una virgola in eccesso prima di una parentesi di chiusura —
{"a": 1,}— che JavaScript tollera ma un parser JSON rigoroso no. - Apici singoli invece di doppi — comune copiando da un letterale oggetto JavaScript.
- Chiavi senza virgolette —
{name: "Marco"}invece di{"name": "Marco"}. - Commenti — la specifica JSON non prevede affatto i commenti, a differenza di JSON5 o JSONC.
- Output troncato — se una risposta API o un file di log viene tagliato a metà, il documento rimane non chiuso.
La virgola decimale, una trappola silenziosa
In italiano la virgola separa i decimali e il punto raggruppa le migliaia: "1.234,50 €" è un prezzo del tutto normale in un foglio Excel. Incollato senza conversione in un campo JSON, {"prezzo": 1.234,50} non è un numero decimale valido per il parser — legge 1.234, incontra una virgola fuori posto e resta un token isolato 50. Uno strumento di riparazione può provare a indovinare il valore corretto, ma non ha modo di garantire se si trattasse di 1234,50 oppure di 1.234 troncato.
Come funziona la riparazione automatica
Uno strumento di riparazione JSON applica euristiche: aggiunge virgolette mancanti, rimuove virgole in eccesso, chiude parentesi non chiuse in base al contesto. Funziona bene per errori tipici e comuni, ma non è magia — lo strumento non può indovinare quale valore fosse previsto se i dati sono danneggiati più seriamente.
I limiti del possibile
La riparazione automatica corregge la sintassi, non la semantica. Se manca un intero campo, o un valore è sbagliato logicamente, lo strumento non lo rileverà — il risultato richiede comunque una verifica manuale, specialmente quando i numeri provengono da un foglio di calcolo in formato italiano.
Quando la riparazione è ambigua
Alcuni danneggiamenti ammettono più correzioni ugualmente plausibili. Una stringa troncata come {"a": 1, "b": 2 può essere chiusa semplicemente con una parentesi — perdendo dati, se in realtà era previsto un altro campo. In questi casi l'euristica fa l'ipotesi "meno distruttiva", ma resta un'ipotesi, non una garanzia.