Generatore schema JSON

Incolla JSON per generare automaticamente un JSON Schema.

Nessun dato lascia il tuo dispositivo

Come usare

  1. Incolla un oggetto o un array JSON nell'area di input.
  2. Attiva le opzioni: includi gli array «required» o gli «examples» derivati dai tuoi valori.
  3. Clicca su Genera lo schema per creare uno JSON Schema (Draft 2020-12).
  4. Copia o scarica lo schema generato.

Domande frequenti

Quale versione di JSON Schema viene generata?

Il generatore produce JSON Schema Draft 2020-12 (https://json-schema.org/draft/2020-12/schema), l'ultima bozza stabile.

Gestisce oggetti e array annidati?

Sì. Il generatore tratta ricorsivamente oggetti e array annidati. Per gli array, deduce lo schema dal primo elemento.

Posso modificare lo schema generato?

L'output è un punto di partenza. Potresti voler aggiungere vincoli come minLength, minimum, pattern o enum in base alle tue esigenze.

A cosa serve JSON Schema

JSON Schema è un modo dichiarativo per descrivere come dovrebbe essere un documento JSON: quali proprietà ha, quali tipi contengono quelle proprietà, cosa è obbligatorio rispetto a cosa è opzionale, e quali valori sono validi. È l'equivalente nel mondo JSON di XSD per XML o di una definizione di tabella di database. Il progetto ufficiale vive su json-schema.org.

Dove lo incontrerai nel mondo reale:

I draft che incontrerai nel mondo reale

La specifica di JSON Schema è stata pubblicata come una serie di draft. Il draft stabile attuale è 2020-12 (dalla pagina ufficiale della specifica: "The current version is 2020-12"). I draft che potresti incontrare:

Nel dubbio, scegli il draft che corrisponde al tuo validatore. AJV (il validatore JavaScript più popolare) supporta i Draft 04, 06, 07, 2019-09 e 2020-12 con opt-in esplicito. jsonschema in Python fa lo stesso. Se non sai cosa vuole il tuo consumatore a valle, 2020-12 è un default sicuro per nuovi lavori.

I tipi integrati

JSON Schema descrive sette tipi base che corrispondono ai tipi di valore di JSON:

tipoValore JSONParole chiave comuni
string"hello"minLength, maxLength, pattern, format
number42, 3.14minimum, maximum, exclusiveMinimum, multipleOf
integer42Sottoinsieme di number; senza componente frazionaria.
booleantrue / falseNessun vincolo aggiuntivo.
nullnullTipo distinto; esplicito quando i null sono validi.
array[…]items, minItems, maxItems, uniqueItems
object{…}properties, required, additionalProperties

Le parole chiave di composizione ti permettono di mescolare e abbinare: oneOf (esattamente uno), anyOf (almeno uno), allOf (ognuno), not (l'inverso). Più enum per una lista finita di valori ammessi e const per un singolo valore fisso.

Cosa uno schema generato automaticamente può e non può dirti

Inferire uno schema da un singolo esempio JSON è potente ma limitato. Il generatore può rilevare:

Non può rilevare:

Tratta l'output come un punto di partenza fatto al 70%. Le aggiunte di valore (quali campi sono davvero obbligatori, quali formati di stringa si applicano, quali intervalli di valori sono ammessi, cosa significa ogni campo) sono il passo di rifinitura umana.

Due trappole sottili che vale la pena conoscere

JSON Schema contro Zod / Joi / Yup contro i tipi TypeScript

Diverse tecnologie si sovrappongono al ruolo di JSON Schema; ognuna ha il suo punto di forza:

Se il tuo schema deve essere consumato da più linguaggi o da strumenti (IDE, tooling OpenAPI, generatori di codice), JSON Schema è il posto giusto. Se resti all'interno di un singolo linguaggio, l'opzione nativa del linguaggio è di solito più piacevole da scrivere.

Casi d'uso comuni

Errori comuni

  1. Trattare lo schema generato automaticamente come la specifica finale. È un punto di partenza. Aggiungi suggerimenti di formato, marca i campi davvero opzionali, aggiungi documentazione, imposta intervalli di valori.
  2. Dimenticare la dichiarazione $schema. I validatori la usano per sapere quale draft applicare. Includila sempre in cima allo schema.
  3. Trattare required come un attributo per proprietà. A differenza di XSD o degli schemi Mongoose, required in JSON Schema è un array al livello dell'oggetto genitore che elenca i nomi delle proprietà obbligatorie.
  4. Dimenticare additionalProperties: false quando vuoi una validazione stretta. Il valore predefinito è true, ovvero le chiavi sconosciute sono ammesse silenziosamente.
  5. Confondere enum con examples. enum = la lista dei valori ammessi (validazione). examples = valori di esempio solo a scopo documentale (nessun effetto di validazione).
  6. Assumere che format sia imposto. Per impostazione predefinita nel Draft 2020-12 è un'annotazione, non un'asserzione; la tua regex per email non verrà eseguita se non attivi l'opzione.
  7. Inferire l'opzionalità da un singolo esempio. Ogni chiave del tuo esempio diventa obbligatoria per impostazione predefinita. Le specifiche reali hanno quasi sempre campi opzionali; rimuovili dall'array required come parte della rifinitura.

Altre domande frequenti

Lo schema funzionerà con OpenAPI 3.1?

Sì. OpenAPI 3.1 (rilasciato a febbraio 2021) ha allineato il suo linguaggio di schemi pienamente con JSON Schema Draft 2020-12, che è ciò che questo generatore emette. Inserisci lo schema in components.schemas nel tuo documento OpenAPI e richiamalo via $ref. OpenAPI 3.0 più vecchio usava un sottoinsieme precedente; potresti dover fare delle modifiche se punti al 3.0.

Posso generare tipi nel mio linguaggio da questo schema?

Sì. quicktype genera TypeScript, Go, Python, Java, C#, Swift, Kotlin, Rust, Elm e altri da uno JSON Schema. json-schema-to-typescript è un'alternativa specifica per JS. La maggior parte dei linguaggi moderni ha almeno uno strumento da schema a tipi; lo schema generato funziona come input per tutti loro.

Qual è la differenza tra $defs e definitions?

Entrambi sono luoghi dove inserire sotto-schemi riutilizzabili che puoi richiamare con $ref altrove nel documento. definitions è il nome legacy, usato nei Draft 04, 06 e 07. $defs è il nome attuale, introdotto nel Draft 2019-09 e mantenuto nel 2020-12. Funzionalmente equivalenti, ma usa $defs per i lavori nuovi.

Il mio JSON viene inviato da qualche parte?

No. La generazione dello schema gira interamente nel tuo browser. Il JSON incollato viene analizzato localmente, percorso ed emesso come schema nella textarea di output. Nulla viene caricato su un server, nulla viene registrato, nulla viene conservato dopo la chiusura della scheda. Conta perché gli esempi JSON contengono spesso dati reali (record dei clienti, risposte API interne, informazioni sui dipendenti) che non vuoi facoltativamente far passare per una terza parte.

Perché lo schema del mio array descrive solo il primo elemento?

L'inferenza da un singolo esempio tratta gli array come omogenei: guarda il primo elemento e assume che il resto corrisponda. Se il tuo array reale può contenere forme diverse, dovrai scrivere a mano items come { "oneOf": [...] }. Oppure esegui il generatore su ogni variante separatamente e combina gli schemi.

Devo proprio usare un generatore, o scrivere lo schema a mano?

Per uno schema piccolo che controlli da capo a piedi, scriverlo a mano ti insegna la specifica più in fretta. Per una risposta API grande con dozzine di oggetti annidati, generare ti porta a una bozza in pochi secondi e dedichi il tempo risparmiato a curare vincoli, descrizioni e array required. La maggior parte degli sviluppatori che lavorano fa entrambe le cose: genera, poi rifinisce.

Strumenti correlati

Formattatore e validatore JSON gratuito online Confronto JSON Convertitore JSON in YAML