Generator JSON Schema

Tempelkan satu atau beberapa sampel JSON, dan generator akan menyimpulkan JSON Schema yang dapat Anda gunakan untuk memvalidasi payload baru. Alat ini mendeteksi tipe, menandai bidang sebagai wajib ketika muncul di setiap sampel, menyimpulkan enum ketika nilai diambil dari himpunan tertutup yang kecil, serta menghasilkan keluaran yang sesuai dengan JSON Schema draft 2020-12.

Cara membuat JSON Schema

  1. 1

    Tempelkan dokumen sampel

    Satu atau beberapa payload nyata; semakin beragam, semakin akurat skema yang disimpulkan.

  2. 2

    Pilih draft-nya

    draft 2020-12 (berlaku saat ini), draft 07 (didukung luas), atau draft 04 (untuk OpenAPI versi lama).

  3. 3

    Sesuaikan inferensi

    Aktifkan/nonaktifkan inferensi enum, strategi bidang wajib (irisan atau gabungan), serta apakah semua bidang ditandai `required` ketika hanya satu sampel yang diberikan.

  4. 4

    Hasilkan

    Skema dihasilkan dengan `$schema`, `title`, `type`, `properties`, serta `$ref` bertingkat untuk sub-objek yang berulang.

Yang dapat dilakukan inferensi dengan baik

  • Tipe: string, number, integer, boolean, null, array, object.
  • Kemampuan bernilai null: bidang yang bernilai null pada satu sampel dan berupa string pada sampel lain akan menjadi ["string", "null"].
  • Elemen array: array homogen menghasilkan satu skema items; array heterogen menghasilkan prefixItems.
  • Enum: jika semua nilai yang teramati berasal dari himpunan kecil (dapat dikonfigurasi, default 10 nilai berbeda), sistem menghasilkan enum.
  • Wajib: dengan beberapa sampel, irisan kunci menjadi required; dengan satu sampel, semua kunci wajib kecuali Anda memilih untuk tidak menyertakannya.
  • Format: string yang cocok dengan tanggal ISO-8601, email, atau URI memperoleh format yang disimpulkan.

Yang tidak dapat diketahui inferensi

  • Maksud vs contoh: sampel age: 25 menyimpulkan type: integer, tetapi tidak dapat mengetahui bahwa Anda juga menerima null. Berikan beberapa sampel yang mencakup kasus tepi.
  • Batasan: minLength, maximum, pattern, Anda harus menambahkannya secara manual. Inferensi tidak menebak batas dari sampel.
  • Logika bisnis: “tepat satu dari tiga bidang ini harus diisi” memerlukan oneOf, tidak dapat disimpulkan.
  • Referensi: generator menghasilkan skema datar. Jika Anda ingin memisahkan bentuk yang berulang ke dalam $defs, lakukan itu setelah proses pembuatan.

Contoh keluaran

Dari satu sampel:

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

Skema yang disimpulkan (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"]
}

Kesalahan umum

  • Menyimpulkan dari satu sampel saja. Skema akan overfitting, setiap bidang menjadi wajib, tanpa toleransi terhadap null. Selalu masukkan minimal 5–10 sampel yang beragam.
  • Menggunakan integer padahal maksud Anda number. Jika ada sampel yang mengandung desimal, tipe yang disimpulkan menjadi number; jika semuanya bilangan bulat, menjadi integer. Untuk bidang yang bisa keduanya, sertakan sampel dengan angka desimal.
  • Melupakan bidang opsional. Bidang yang muncul di 4 dari 5 sampel tetapi tidak ada di 1 sampel menjadi opsional, sesuai maksud. Jika kelima sampel kebetulan menyertakannya, skema akan menandainya wajib meskipun sebenarnya opsional di API Anda.

Pertanyaan yang Sering Diajukan

Semakin banyak semakin baik, tetapi biasanya 5–10 sampel yang beragam sudah menghasilkan skema yang memadai. Dengan satu sampel, setiap bidang menjadi wajib dan kemampuan bernilai null tidak dapat disimpulkan, jadi selalu berikan beberapa varian jika memungkinkan.

draft 2020-12 secara default. draft 07 dan 04 tersedia untuk kompatibilitas dengan OpenAPI 3.0 (yang menggunakan subset dari draft 05/07).

Tidak. Menyimpulkan batasan dari sampel akan menyebabkan overfitting pada skema. Tambahkan minLength, maximum, pattern, dan sebagainya secara manual setelah pembuatan berdasarkan aturan bisnis Anda.

Ya. Jika Anda menempelkan array JSON, generator memperlakukan setiap elemen sebagai sampel terpisah dan menghasilkan skema yang mendeskripsikan satu elemen, bukan array terluarnya. Aktifkan opsi “perlakukan sebagai kontainer array” jika Anda justru menginginkan bentuk array terluar.

Alat Terkait

Alat ini tersedia dalam bahasa lain