Skip to main content

Incolla JSON e genera un JSON Schema.

Tutti i calcoli sono eseguiti localmente nel tuo browser. Nessun dato viene inviato al server.

I risultati hanno carattere informativo. Verificali con altre fonti.

Inferire uno JSON Schema, e ciò che l'inferenza non può sapere

Uno schema generato da un campione descrive quel campione, non il tuo modello di dati. Azzecca la forma e sbaglia l'intenzione, perché un singolo esempio non può dire quali campi siano facoltativi, quali valori formino un'enumerazione e quali null abbiano significato.

Come funziona

  • Percorre il JSON ed emette un tipo per ogni valore: oggetto, array, stringa, numero, booleano o null.
  • Contrassegna come obbligatoria ogni chiave presente nel campione, perché è tutto ciò che un singolo esempio può sostenere.
  • Scende ricorsivamente negli oggetti annidati e deduce i tipi degli elementi degli array da ciò che trova.
tipi dedotti
  "testo"     → string
  42          → number (integer se senza decimali)
  true        → boolean
  null        → null   (non "facoltativo")
  [ ... ]     → array con elementi dedotti
  { ... }     → object con proprietà

required = ogni chiave vista nel campione

Esempio pratico

Inferenza da {"id": 1, "name": "Ada", "email": null, "tags": ["a", "b"]}.

  1. id → integer, name → string
  2. email → null, quasi certamente sbagliato: dovrebbe essere ["string", "null"]
  3. tags → array di stringhe
  4. tutte e quattro le chiavi contrassegnate come obbligatorie
  5. nessun maxLength, nessun format, nessun enum: nulla di ciò è visibile in un campione

Uno schema strutturalmente corretto che rifiuterebbe dati validi. Il campo email tipizzato come null accetta solo null, e contrassegnare tutte le chiavi come obbligatorie rifiuta qualunque record in cui una manchi.

Come leggere il risultato

  • Un null nel campione non significa che il tipo sia null. Quasi sempre significa che il campo ammette null, quindi il tipo corretto è un'unione come ["string", "null"]. L'inferenza non sa distinguerli e indovina sempre il più stretto.
  • Finisce tutto in required perché l'assenza è invisibile. Fornisci più documenti differenti e l'unione delle chiavi mostrerà la forma vera; con un solo campione stai descrivendo quel documento.
  • Formati, enumerazioni e limiti sono invisibili all'inferenza. Un'e-mail, un UUID, una data e una stringa qualsiasi appaiono identici; aggiungere format, enum, minimum e maxLength è il lavoro che trasforma una forma in un contratto.
  • Gli array sono l'inferenza più debole. Un array vuoto non dà alcun tipo di elemento, e un array di tipi misti di solito significa che il campione non è rappresentativo, non che il campo accetti davvero qualsiasi cosa.

Domande frequenti

Perché il mio schema generato rifiuta dati validi?
Quasi sempre perché ogni chiave è stata contrassegnata come obbligatoria, oppure perché un campo che nel campione era null è stato tipizzato come null anziché come nullable. Entrambi sono artefatti dell'inferenza da un solo documento ed entrambi vanno corretti a mano.
Come ottengo uno schema davvero utile?
Considera l'output una prima bozza. Allarga a unioni i campi che ammettono null, togli da required le chiavi realmente facoltative, aggiungi format ed enum dove conosci il vincolo, e validalo su più documenti reali anziché su quello da cui l'hai generato.