← Tutti gli articoli

Come validare JSON: sintassi e validazione di schema

Valida la sintassi JSON con JSON.parse, json.loads di Python, jq o nel browser — e impara a controllare struttura e tipi con JSON Schema.

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 id sia intero, che email sia 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 finale

Se 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 finale

Come 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 dettagli

Validazione 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:

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.