~/tools / LLM JSON Repair
LLM JSON Repair — Correggi il JSON rotto restituito da un modello di IA
Correggi il quasi-JSON restituito dai modelli di IA: toglie i blocchi di codice e il testo di contorno, rimuove virgole finali e commenti, sistema virgolette, chiavi e valori Python, ed elenca con precisione cosa ha cambiato. Nulla lascia il tuo browser.
Vengono applicate solo le correzioni con un'unica risposta chiara. Tutto il resto viene segnalato con la sua posizione invece di essere indovinato.
Tutto avviene nel tuo browser. Il testo che incolli non viene caricato.
I modelli linguistici spesso avvolgono il JSON in un blocco di codice e in una frase, poi ne rompono la sintassi: una virgola finale, apici singoli, un commento, True al posto di true. JSON.parse rifiuta tutto questo. Questo strumento trova il JSON nel testo e ripara solo i problemi che hanno un'unica correzione chiara, poi elenca ogni modifica perché tu possa valutarla. Se l'output è stato troncato, chiude ciò che è rimasto aperto e ti avverte che potrebbero mancare dei dati. Non tira a indovinare: l'input che non riesce a riparare viene segnalato con la posizione invece di essere alterato in silenzio.
Casi d'uso
- Correggere la risposta di un modello prima di passarla a JSON.parse o di salvarla in un file di configurazione
- Ripulire una risposta che ha un blocco di codice e una spiegazione attorno al JSON
- Controllare cosa è cambiato, così che un valore riparato non arrivi in produzione senza che nessuno se ne accorga
Utilizzo
- Incolla la risposta del modello oppure carica l'esempio.
- Leggi il JSON riparato e l'elenco delle modifiche sotto di esso.
- Copia il risultato. Le modifiche segnate in ambra possono far perdere informazioni, quindi controllale.
Che cosa conta come JSON valido
- Stringhe e nomi dei membri usano solo i doppi apici. Gli apici singoli non fanno parte della grammatica.
- Non esistono commenti. L'unico riempitivo ammesso sono gli spazi bianchi.
- La virgola va solo tra membri o elementi, quindi una virgola finale non è ammessa.
- Un valore è un oggetto, un array, un numero o una stringa, oppure uno tra false, null e true. Infinity, NaN e undefined non sono valori JSON.
- I numeri non possono avere uno zero iniziale né un + iniziale, e il punto decimale vuole cifre su entrambi i lati, quindi 012, +5, .5 e 5. sono tutti non validi.
- I caratteri di controllo da U+0000 a U+001F dentro una stringa devono avere l'escape, quindi un a capo grezzo in una stringa non è valido.
- Il livello più alto può essere un valore qualsiasi, non solo un oggetto o un array.
Come si rompe di solito l'output dei modelli
| Problema | Esempio | Cosa fa questo strumento |
|---|---|---|
| Blocco di codice e chiacchiere | Sure! ```json { … } ``` Hope this helps | Prende solo il JSON |
| Virgola finale | [1, 2,] | Toglie la virgola |
| Commento | {"a": 1 // note} | Toglie il commento |
| Apici singoli | {'a': 'b'} | Usa i doppi apici |
| Chiave senza virgolette | {a: 1} | Mette le virgolette attorno alla chiave |
| Valori Python | {"ok": True, "x": None} | Scrive true e null |
| A capo grezzo in una stringa | "line one⏎line two" | Lo trasforma in \n |
| NaN o undefined | {"x": NaN} | Scrive null e avverte che il valore va perso |
| Risposta troncata | {"items": [{"id": 1}, {"id": | Chiude ciò che è aperto e avverte che potrebbero mancare dei dati |
Che cosa si può riparare senza rischi e che cosa no
Una riparazione è sicura quando il testo rotto ha una sola lettura sensata. Una virgola finale, un commento o un blocco di codice si possono togliere senza cambiare ciò che dicono i dati. Altre modifiche ne alterano il significato, quindi vengono segnalate e conviene controllarle: chiudere una risposta troncata dà un JSON valido ma privo di dati, e trasformare NaN in null butta via il valore originale.
Due limiti vengono dal JSON stesso. La RFC 8259 dice che i nomi dentro un oggetto dovrebbero essere unici e che il comportamento del software è imprevedibile quando non lo sono; questo strumento tiene l'ultimo, come fa JSON.parse. La RFC dice anche che il software interopera bene quando non si aspetta più intervallo o precisione di un double IEEE 754. Questo strumento conserva i numeri come li hai scritti, ma un programma che interpreta un intero molto lungo come double lo arrotonda. Gli interi tra -(2^53)+1 e (2^53)-1 sono esatti.
Meglio: chiedi all'API un output strutturato
Riparare è un ripiego. Le API dei modelli possono vincolare l'output a uno schema, e i tre fornitori lo documentano in modo diverso.
- OpenAI: Structured Outputs fa generare al modello risposte conformi al tuo JSON Schema, mentre la modalità JSON garantisce soltanto un JSON valido. Un rifiuto può non seguire lo schema, e una risposta che raggiunge il limite massimo di token è incompleta (stato incomplete, motivo max_output_tokens).
- Anthropic: gli output strutturati usano la decodifica vincolata affinché la risposta segua il tuo schema, e la documentazione dice che ciò vale nella maggior parte dei casi. Un rifiuto (stop_reason refusal) o una risposta interrotta da max_tokens può non corrispondere allo schema, quindi controlla stop_reason prima di fare il parsing.
- Google Gemini: il modello è configurato per produrre JSON conforme allo schema che fornisci. La correttezza semantica non è garantita, quindi convalida i valori, e alcuni vincoli come minLength e maxLength non vengono applicati.
Nessuna delle tre documentazioni promette JSON valido quando l'output viene troncato. Controlla perché il modello si è fermato prima di fidarti di un risultato interpretato.
Fonti (verificate il 2026-10-23): RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output
FAQ
Che cosa corregge?
Rimuove il blocco di codice e il testo attorno al JSON; toglie le virgole finali e i commenti // o /* */; trasforma apici singoli e virgolette tipografiche in doppi apici; mette tra virgolette le chiavi scoperte; trasforma True, False e None in true, false e null; aggiunge le virgole mancanti tra le righe; applica l'escape agli a capo grezzi dentro le stringhe; e riscrive numeri come +5, .5 e 0x1F in numeri JSON validi.
Che cosa non cambia mai?
I valori. Le stringhe restano carattere per carattere e i numeri conservano le loro cifre, quindi un ID lungo come 12345678901234567890 non viene arrotondato. Le chiavi duplicate seguono JSON.parse: vince l'ultima.
E se la risposta è stata troncata?
Chiude le stringhe, gli array e gli oggetti rimasti aperti e scarta una chiave che non ha ancora un valore. Il testo diventa valido ma non completo, quindi il risultato è segnato come possibilmente privo di dati. Chiedi al modello di continuare, o alza il suo limite di output, invece di fidarti di un risultato troncato.
Perché NaN o undefined sono diventati null?
JSON non ha NaN, Infinity né undefined. Lo strumento scrive null al loro posto e lo segnala, perché il valore originale va perso.
Perché rifiuta certi input?
Quando non esiste un'unica correzione ovvia, per esempio con dei puntini di sospensione (...) al posto di elementi omessi, o con una parola nuda dove ci vorrebbe un valore, si ferma e mostra dove, invece di tirare a indovinare.
Il testo viene inviato a un server?
No. La riparazione avviene nel tuo browser.