Validare JSON significa confermare che una stringa è sintatticamente corretta (rispetta la grammatica JSON) e, opzionalmente, strutturalmente corretta (si incastra nella forma che la tua applicazione si aspetta). Questa guida mostra come validare JSON in JavaScript, Python, da riga di comando e nel browser —— e spiega la differenza cruciale tra validazione di sintassi e validazione con schema.
Due tipi di validazione JSON
Prima di validare qualunque cosa, decidi quale domanda stai davvero facendo:
- Validazione di sintassi —— „questo è almeno JSON valido?“ Controlla virgolette, virgole, parentesi e tipi di valore contro la grammatica JSON.
JSON.parse()lo fa. - Validazione con schema —— „questo JSON ha i campi, tipi e vincoli giusti?“ Verifica che
idsia intero, cheemailsia presente ecc. Richiede JSON Schema e un validatore come Ajv.
La maggior parte delle ricerche „validate JSON“ si riferisce alla validazione di sintassi —— partiamo da lì.
Come validare JSON in JavaScript
Il controllo di sintassi più semplice e affidabile è tentare il parse e catturare l'errore. JSON.parse() lancia un SyntaxError su qualunque input non valido:
function isValidJson(text) {
try {
JSON.parse(text);
return true;
} catch {
return false;
}
}
isValidJson('{"name":"Ada"}'); // true
isValidJson("{'name':'Ada'}"); // false —— apici singoli
isValidJson('{"a":1,}'); // false —— virgola finaleSe ti serve la ragione del fallimento, cattura il messaggio di errore —— di solito include la posizione:
function validateJson(text) {
try {
return { valid: true, value: JSON.parse(text) };
} catch (err) {
return { valid: false, error: err.message };
}
}
validateJson('{"a":1,}');
// { valid: false, error: "Expected double-quoted property name in JSON at position 7" }Non usare espressioni regolari per validare JSON. JSON è una grammatica ricorsiva e non si può validare correttamente con regex —— JSON.parse() è il validatore canonico ed è già integrato in ogni runtime JavaScript.
Come validare JSON in Python
json.loads() di Python lancia json.JSONDecodeError su input non valido, con riga e colonna esatte:
import json
def is_valid_json(text):
try:
json.loads(text)
return True
except json.JSONDecodeError as e:
print(f"Invalid JSON: {e.msg} at line {e.lineno} column {e.colno}")
return False
is_valid_json('{"name": "Ada"}') # True
is_valid_json('{"name": "Ada",}') # False —— virgola finaleCome validare un file JSON da riga di comando
Con jq
jq esce con codice diverso da zero se l'input non è JSON valido —— ideale per script e CI:
# Non stampa nulla ed esce 0 se valido; stampa errore ed esce != 0 altrimenti
jq empty data.json && echo "valid" || echo "invalid"Con Python (senza installare nulla)
python3 -m json.tool data.json > /dev/null && echo "valid"In una pipeline di CI
Valida tutti i file JSON del repo come step pre-commit o CI perché configurazione malformata non arrivi mai in produzione:
# Fa fallire la build se qualche .json non è valido
find . -name '*.json' -not -path './node_modules/*' \
-exec sh -c 'jq empty "$1" || exit 255' _ {} \;Valida JSON nel browser
Per un controllo rapido senza scrivere codice, incolla il tuo JSON nel validatore JSON di fixjson. Segnala riga e posizione esatta di qualunque errore di sintassi mentre scrivi, e tutto gira in locale —— niente viene inviato al server, quindi è sicuro per payload sensibili. Se il JSON è rotto e preferisci ripararlo invece di solo segnalarlo, JSON Fix corregge automaticamente gli errori comuni.
Oltre la sintassi: validare la struttura con JSON Schema
Un JSON sintatticamente valido può comunque essere sbagliato per la tua applicazione —— un campo obbligatorio mancante, una stringa dove ti aspettavi un numero, un valore fuori range. Per imporre struttura, descrivi la forma attesa con JSON Schema e valida con Ajv (JavaScript) o la libreria jsonschema (Python):
import Ajv from 'ajv';
const ajv = new Ajv();
const validate = ajv.compile({
type: 'object',
required: ['id', 'email'],
properties: {
id: { type: 'integer' },
email: { type: 'string' },
},
});
validate({ id: 42, email: 'a@b.com' }); // true
validate({ id: '42' }); // false —— tipo sbagliato, niente email
// validate.errors contiene i dettagliValidazione con schema da riga di comando
Per check CI di JSON contro schema, due CLI coprono quasi tutto:
# Python —— installa una volta e valida
pip install jsonschema
jsonschema --instance data.json schema.json && echo OK
# Node —— Ajv come CLI
npm i -g ajv-cli ajv-formats
ajv validate -c ajv-formats -s schema.json -d "data.*.json"Validare JSON a ogni commit (hook pre-commit)
Per impedire commit di JSON non validato, collega un hook con husky + lint-staged:
// package.json
{
"lint-staged": {
"*.json": [
"jq empty",
"ajv validate -s schemas/$name.schema.json -d"
]
}
}
# installa l'hook
npx husky add .husky/pre-commit "npx lint-staged" Per progetti Python, il framework ufficiale pre-commit include un hook check-json che esegue json.loads su ogni file in staging.
Errori comuni di validazione JSON
Quando la validazione fallisce, la causa è di solito una di queste —— ognuna ha una guida dedicata:
- Virgole finali dopo l'ultimo elemento
- Apici singoli invece di doppie, o chiavi senza virgolette
- Errori Unexpected-token (risposte HTML,
undefined, commenti) - Unexpected end of input per JSON troncato o non chiuso
- „[object Object] is not valid JSON“ quando si fa stringify di un oggetto prima del parse
Domande frequenti
Come verifico che una stringa sia JSON valido?
Passala a JSON.parse() dentro try/catch (JavaScript) o a json.loads() dentro try/except (Python). Se non lancia, è valido. Per controllo senza codice, usa un validatore nel browser.
Posso validare JSON con un'espressione regolare?
No. JSON è una grammatica ricorsiva che non si può esprimere con regex. Usa sempre un parser vero come JSON.parse().
Qual è la differenza tra validare e parsare JSON?
Parsare trasforma il testo in un valore utilizzabile; validare conferma solo che potrebbe essere parsato. Nella pratica, un parse riuscito è la validazione —— è la stessa operazione, semplicemente scarti il risultato quando ti importa solo della validità.
Come valido JSON contro uno schema?
Usa JSON Schema con Ajv (JavaScript) o la libreria jsonschema (Python). La validazione con schema controlla tipi, campi obbligatori e vincoli —— non solo sintassi.
Valida JSON ora —— niente installazione
Incolla il tuo JSON nel validatore JSON per vedere errori di sintassi all'istante, con riga e posizione esatta evidenziate. Tutto gira nel tuo browser; nessun dato lascia il tuo computer.
- Validatore JSON —— controlla la sintassi all'istante nel browser
- JSON Fix —— ripara JSON non valido, non solo lo segnala
- Cos'è JSON Schema? —— valida struttura e tipi, non solo sintassi
- Cos'è JSON? —— le regole grammaticali che rendono JSON valido o no