JSON-schemagenerator

Plak een of meer JSON-voorbeelden en de generator leidt een JSON-schema af dat u kunt gebruiken om nieuwe payloads te valideren. Het detecteert typen, markeert velden als verplicht wanneer ze in elk voorbeeld voorkomen, leidt enums af wanneer waarden uit een kleine gesloten verzameling komen en produceert uitvoer die voldoet aan JSON-schema draft 2020-12.

Zo genereert u een JSON-schema

  1. 1

    Plak voorbeelddocumenten

    Een of meer echte payloads: hoe meer variatie, hoe nauwkeuriger het afgeleide schema.

  2. 2

    Kies de draft

    draft 2020-12 (huidig), draft 07 (breed ondersteund) of draft 04 (voor het verouderde OpenAPI).

  3. 3

    Inferentie afstemmen

    Enum-inferentie in- of uitschakelen, de strategie voor verplichte velden (doorsnede versus vereniging) en of alle velden als `required` worden gemarkeerd wanneer er slechts één voorbeeld wordt gegeven.

  4. 4

    Genereren

    Het schema wordt uitgevoerd met `$schema`, `title`, `type`, `properties` en geneste `$ref`s voor herhaalde subobjecten.

Wat de inferentie goed doet

  • Typen: string, number, integer, boolean, null, array, object.
  • Nullbaarheid: een veld dat in het ene voorbeeld null is en in het andere een string, wordt ["string", "null"].
  • Array-elementen: homogene arrays leveren één items-schema op; heterogene arrays leveren prefixItems op.
  • Opsommingen (enum): als alle waargenomen waarden uit een kleine verzameling komen (instelbaar, standaard 10 verschillende waarden), wordt een enum uitgevoerd.
  • Verplicht: bij meerdere voorbeelden wordt de doorsnede van sleutels required; bij één voorbeeld zijn alle sleutels verplicht, tenzij u zich afmeldt.
  • Formaten: strings die overeenkomen met ISO-8601-datums, e-mailadressen of URI’s krijgen een afgeleid format.

Wat de inferentie niet kan weten

  • Bedoeling versus voorbeeld: een voorbeeld age: 25 leidt type: integer af, maar kan niet weten dat u ook null accepteert. Geef meerdere voorbeelden die randgevallen dekken.
  • Beperkingen: minLength, maximum, pattern, deze moet u handmatig toevoegen. De inferentie raadt geen grenzen op basis van voorbeelden.
  • Bedrijfslogica: “precies één van deze drie velden moet ingesteld zijn” vereist oneOf, niet af te leiden.
  • Referenties: de generator levert een plat schema op. Als u herhaalde vormen wilt uitsplitsen naar $defs, doe dat dan na het genereren.

Voorbeelduitvoer

Uit één voorbeeld:

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

Het afgeleide schema (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"]
}

Veelvoorkomende fouten

  • Afleiden uit één voorbeeld. Het schema wordt overfit: elk veld wordt verplicht, zonder tolerantie voor null. Geef altijd minstens 5–10 gevarieerde voorbeelden.
  • integer gebruiken terwijl u number bedoelde. Als een voorbeeld een decimaal bevat, wordt het afgeleide type number; als alle waarden gehele getallen zijn, wordt het integer. Neem voor velden die beide kunnen zijn een voorbeeld met een decimaal op.
  • Optionele velden vergeten. Een veld dat in 4 van de 5 voorbeelden voorkomt maar in 1 ontbreekt, wordt optioneel, zoals bedoeld. Als alle 5 voorbeelden het toevallig bevatten, markeert het schema het als verplicht, ook al is het in uw API eigenlijk optioneel.

Veelgestelde vragen

Hoe meer, hoe beter, maar 5–10 gevarieerde voorbeelden leveren doorgaans een bruikbaar schema op. Met één voorbeeld wordt elk veld verplicht en kan de nullbaarheid niet worden afgeleid, geef daarom altijd meerdere varianten als dat kan.

Standaard draft 2020-12. Draft 07 en 04 zijn beschikbaar voor compatibiliteit met OpenAPI 3.0 (dat een subset van draft 05/07 gebruikt).

Nee. Beperkingen uit voorbeelden afleiden zou het schema overfitten. Voeg minLength, maximum, pattern enzovoort handmatig toe na het genereren, op basis van uw bedrijfsregels.

Ja. Als u een JSON-array plakt, behandelt de generator elk element als een afzonderlijk voorbeeld en produceert een schema dat een enkel element beschrijft, niet de buitenste array. Schakel de optie “als arraycontainer behandelen” in als u juist de vorm van de buitenste array wilt.

Gerelateerde tools

Tool beschikbaar in andere talen