Generatore di JSON Schema

Incolla uno o più campioni JSON e il generatore inferisce un JSON Schema che puoi utilizzare per convalidare nuovi payload. Rileva i tipi, segna i campi come richiesti quando appaiono in ogni campione, inferisce gli enum quando i valori provengono da un piccolo insieme chiuso e produce un output conforme al JSON Schema draft 2020-12.

Come generare un JSON Schema

  1. 1

    Incolla documenti campione

    Uno o più payload reali, maggiore varietà, maggiore accuratezza dello schema inferito.

  2. 2

    Scegli il draft

    Draft 2020-12 (attuale), draft 07 (ampiamente supportato) o draft 04 (OpenAPI legacy).

  3. 3

    Regola l'inferenza

    Attiva l'inferenza degli enum, strategia dei campi richiesti (intersezione vs unione) e se contrassegnare tutti i campi come `richiesti` quando viene fornito solo un campione.

  4. 4

    Genera

    Lo schema viene emesso con `$schema`, `title`, `type`, `properties` e `$ref` annidati per oggetti secondari ripetuti.

Cosa fa bene l’inferenza

  • Tipi: stringa, numero, intero, booleano, null, array, oggetto.
  • Nullabilità: un campo che è null in un campione e una stringa in un altro diventa ["string", "null"].
  • Elementi dell’array: gli array omogenei producono uno schema items singolo; gli array eterogenei producono prefixItems.
  • Enumerazioni (enum): se tutti i valori osservati provengono da un piccolo insieme (configurabile, predefinito 10 valori distinti), emette un enum.
  • Richiesti: con più campioni, l’intersezione delle chiavi diventa richiesta; con un campione, tutte le chiavi sono richieste a meno che tu non decida di escluderle.
  • Formati: le stringhe che corrispondono a date ISO-8601, email o URI ottengono un format inferito.

Cosa l’inferenza non può sapere

  • Intento vs esempio: un campione age: 25 inferisce type: integer, ma non può sapere che accetti anche null. Passa più campioni che coprano i casi limite.
  • Vincoli: minLength, maximum, pattern, devi aggiungerli manualmente. L’inferenza non indovina i limiti dai campioni.
  • Logica aziendale: “esattamente uno di questi tre campi deve essere impostato” richiede oneOf, non inferibile.
  • Riferimenti: il generatore emette uno schema piatto. Se desideri fattorizzare forme ripetute in $defs, fallo dopo la generazione.

Esempio di output

Da un singolo campione:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Lo schema inferito (draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Errori comuni

  • Inferire da un campione. Lo schema si adatterà eccessivamente, ogni campo diventa richiesto, senza tolleranza per null. Fornisci sempre almeno 5-10 campioni variati.
  • Usare integer quando intendevi number. Se un campione ha un decimale, il tipo inferito diventa number; se tutti sono interi, diventa integer. Per i campi che potrebbero essere entrambi, includi un campione decimale.
  • Dimenticare i campi opzionali. Un campo presente in 4 campioni su 5 ma mancante in 1 diventa opzionale, intenzionale. Se tutti e 5 i campioni lo includono, lo schema lo contrassegnerà come richiesto anche se in realtà è opzionale nella tua API.

Domande frequenti

Più ce ne sono, meglio è, ma 5-10 campioni variati producono tipicamente uno schema ragionevole. Con un campione, ogni campo diventa richiesto e la nullabilità non può essere inferita, fornisci sempre più varianti se puoi.

Draft 2020-12 per impostazione predefinita. Draft 07 e 04 sono disponibili per la compatibilità con OpenAPI 3.0 (che utilizza un sottoinsieme del draft 05/07).

No. Inferire vincoli sensati dai campioni porterebbe a un adattamento eccessivo dello schema. Aggiungi minLength, maximum, pattern ecc. manualmente dopo la generazione in base alle tue regole aziendali.

Sì. Se incolli un array JSON, il generatore tratta ogni elemento come un campione separato e produce uno schema che descrive un elemento individuale, non l’array esterno. Attiva “tratta come contenitore array” se desideri la forma dell’array esterno.

Strumenti correlati

Strumento disponibile in altre lingue