Vai al contenuto

Da JSON a JSON Schema

JSON to JSON Schema

Deduce un JSON Schema da uno o più esempi, unendo le forme che incontra.

Descrive un documento di esempio come uno JSON Schema (2020-12): tipi, proprietà, `required` e `$defs` annidati per le forme ripetute. Utile per un test di contratto, per un componente OpenAPI o ovunque un validatore voglia uno schema anziché un esempio.

🔒 Funziona interamente nel tuo browserjson-schemajsoncodegenvalidation
Produci

JSON di esempio

Trascina un file .json

Letto in questa scheda. Non viene caricato niente.

Dagli tutti gli elementi che hai. Ogni record in più restringe la deduzione: un campo che manca in uno di loro è proprio quello che lo rende facoltativo.

TypeScript

Come si usa

  1. Incollare tutti i record che si hanno

    Viene letto e fuso ogni elemento di ogni array, non solo il primo. Tre record dicono molto più di uno, perché un campo che manca in uno di essi è esattamente ciò che rende quel campo facoltativo.

  2. Dare un nome al tipo radice

    Gli oggetti annidati prendono il nome dalla chiave che li contiene, al singolare per gli array, così `users` produce un `User`. Solo la radice ha bisogno di un nome dato a mano.

  3. Leggere i conteggi sotto l’uscita

    Tipi, campi facoltativi, unioni e quanti record sono stati fusi. Un conteggio di unioni sopra lo zero vuol dire che nel campione un campo ha contenuto due generi di valore diversi — vale la pena guardarlo prima di incollare il risultato in una base di codice.

  4. Portare lo schema a un validatore

    L’uscita porta con sé la sua parola chiave `$schema`, quindi può andare dritta nel validatore JSON Schema di questo sito o in qualunque implementazione 2020-12.

Domande frequenti

Di quale draft si tratta?

Del Draft 2020-12, dichiarato nella parola chiave `$schema`. Le forme riusabili vanno in `$defs` e si richiamano con `$ref`, che è la scrittura di quel draft; gli strumenti per il Draft-07 vogliono invece `definitions` e non risolveranno questi riferimenti.

Perché niente è vincolato oltre al suo tipo?

Non viene emesso nessun `format`, `minLength`, `pattern` o `enum`. Ognuno di questi sarebbe dedotto da una manciata di record, e uno schema che rifiuta dati di produzione validi è peggio di uno semplicemente largo. Vanno aggiunti i vincoli che si possono davvero giustificare.

`additionalProperties` viene impostato?

Viene lasciato aperto, il che vuol dire che le chiavi in più passano la convalida. Chiuderlo trasformerebbe ogni campo che l’API aggiunge in seguito in un errore di convalida, e un campione non può dire se la forma sia pensata per essere chiusa.

Come decide che cosa va in `required`?

Una proprietà è obbligatoria quando era presente in ogni record fuso in quella forma. Se si incolla un record è obbligatorio tutto; se se ne incollano cinque, lo schema comincia a dire qualcosa di vero.

Può ricevere da

Dopo

Questi accettano ciò che produce questo strumento, così il risultato può passare direttamente.