JSON-schemagenerator

Klistra in ett eller flera JSON-exempel så härleder generatorn ett JSON-schema som du kan använda för att validera nya nyttolaster. Den identifierar typer, markerar fält som obligatoriska när de förekommer i varje exempel, härleder enum-värden när värdena hämtas från en liten sluten mängd och skapar utdata som följer JSON-schema draft 2020-12.

Så här genererar du ett JSON-schema

  1. 1

    Klistra in exempeldokument

    En eller flera verkliga nyttolaster; ju större variation, desto mer exakt blir det härledda schemat.

  2. 2

    Välj draft

    draft 2020-12 (gällande), draft 07 (brett stödd) eller draft 04 (för äldre OpenAPI).

  3. 3

    Justera härledningen

    Slå på/av enum-härledning, strategi för obligatoriska fält (snitt eller union) och om alla fält ska markeras som `required` när endast ett exempel anges.

  4. 4

    Generera

    Schemat skapas med `$schema`, `title`, `type`, `properties` samt nästlade `$ref` för upprepade delobjekt.

Vad härledningen gör bra

  • Typer: string, number, integer, boolean, null, array, object.
  • Nullbarhet: ett fält som är null i ett exempel och en sträng i ett annat blir ["string", "null"].
  • Array-element: homogena arrayer ger ett enda items-schema; heterogena arrayer ger prefixItems.
  • Enum: om alla observerade värden hör till en liten mängd (konfigurerbart, standard 10 olika värden) skapas ett enum.
  • Obligatorisk: med flera exempel blir snittet av nycklar required; med ett exempel är alla nycklar obligatoriska om du inte väljer bort det.
  • Format: strängar som matchar ISO-8601-datum, e-postadresser eller URI:er får ett härlett format.

Vad härledningen inte kan veta

  • Avsikt kontra exempel: exemplet age: 25 härleder type: integer, men kan inte veta att du även accepterar null. Skicka flera exempel som täcker gränsfall.
  • Begränsningar: minLength, maximum, pattern, dessa måste du lägga till manuellt. Härledningen gissar inte gränser utifrån exempel.
  • Affärslogik: kravet “exakt ett av dessa tre fält måste vara satt” kräver oneOf, kan inte härledas.
  • Referenser: generatorn skapar ett platt schema. Om du vill bryta ut upprepade strukturer till $defs, gör det efter genereringen.

Exempel på utdata

Från ett enda exempel:

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

Det härledda schemat (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"]
}

Vanliga misstag

  • Att härleda från ett enda exempel. Schemat blir överanpassat, varje fält blir obligatoriskt och det finns ingen tolerans för null. Ange alltid minst 5–10 varierade exempel.
  • Att använda integer när du menade number. Om något exempel innehåller ett decimaltal blir den härledda typen number; om alla är heltal blir den integer. För fält som kan vara båda, ta med ett exempel med ett decimaltal.
  • Att glömma valfria fält. Ett fält som finns i 4 av 5 exempel men saknas i 1 blir valfritt, som avsett. Om alla 5 exempel råkar innehålla det markerar schemat det som obligatoriskt, även om det egentligen är valfritt i ditt API.

Vanliga frågor

Ju fler desto bättre, men 5–10 varierade exempel ger vanligtvis ett rimligt schema. Med ett enda exempel blir varje fält obligatoriskt och nullbarheten kan inte härledas, ange därför alltid flera varianter om du kan.

draft 2020-12 som standard. draft 07 och 04 finns tillgängliga för kompatibilitet med OpenAPI 3.0 (som använder en delmängd av draft 05/07).

Nej. Att härleda begränsningar från exempel skulle överanpassa schemat. Lägg till minLength, maximum, pattern osv. manuellt efter genereringen, utifrån dina affärsregler.

Ja. Om du klistrar in en JSON-array behandlar generatorn varje element som ett separat exempel och skapar ett schema som beskriver ett enskilt element, inte den yttre arrayen. Aktivera alternativet “behandla som array-behållare” om du i stället vill ha formen på den yttre arrayen.

Relaterade verktyg

Verktyget finns på andra språk