Generator JSON Schema

Tempel JSON untuk secara otomatis menghasilkan JSON Schema.

Tidak ada data yang meninggalkan perangkat Anda

Cara menggunakan

  1. Tempel objek atau array JSON di area input.
  2. Aktifkan opsi: sertakan array "required" atau "examples" dari nilai Anda.
  3. Klik Buat skema untuk membuat JSON Schema (Draft 2020-12).
  4. Salin atau unduh skema yang dihasilkan.

Pertanyaan umum

Versi JSON Schema apa yang dihasilkan?

Generator menghasilkan JSON Schema Draft 2020-12 (https://json-schema.org/draft/2020-12/schema), draft stabil terbaru.

Apakah menangani objek dan array bersarang?

Ya. Generator memproses objek dan array bersarang secara rekursif. Untuk array, ia menyimpulkan skema dari elemen pertama.

Bisakah saya mengedit skema yang dihasilkan?

Keluaran adalah titik awal. Anda mungkin ingin menambahkan kendala seperti minLength, minimum, pattern, atau enum sesuai kebutuhan Anda.

JSON Schema Untuk Apa

JSON Schema adalah cara deklaratif untuk menggambarkan seperti apa seharusnya sebuah dokumen JSON: properti apa yang dimilikinya, tipe apa yang dipegang properti itu, apa yang wajib vs opsional, dan nilai apa yang sah. Ia adalah padanan dunia-JSON dari XSD untuk XML atau definisi tabel basis data. Proyek resminya berada di json-schema.org.

Di mana Anda akan menemukannya di alam liar:

Draf yang Akan Anda Temui di Alam Liar

Spesifikasi JSON Schema diterbitkan sebagai serangkaian draf. Draf stabil saat ini adalah 2020-12 (per halaman spesifikasi resmi: "The current version is 2020-12"). Draf yang mungkin Anda jumpai:

Jika ragu, pilih draf yang cocok dengan validator Anda. AJV (validator JavaScript paling populer) mendukung Draft 04, 06, 07, 2019-09, dan 2020-12 dengan opt-in eksplisit. jsonschema di Python juga sama. Jika Anda tidak tahu apa yang diinginkan konsumen di hilir, 2020-12 adalah bawaan aman untuk pekerjaan baru.

Tipe Bawaan

JSON Schema menggambarkan tujuh tipe dasar yang sesuai dengan jenis nilai JSON:

tipeNilai JSONKata kunci umum
string"hello"minLength, maxLength, pattern, format
number42, 3.14minimum, maximum, exclusiveMinimum, multipleOf
integer42Subset dari number; tanpa komponen pecahan.
booleantrue / falseTanpa batasan tambahan.
nullnullTipe terpisah; eksplisit ketika null adalah nilai yang sah.
array[…]items, minItems, maxItems, uniqueItems
object{…}properties, required, additionalProperties

Kata kunci komposisi memungkinkan Anda mencampur-mencocokkan: oneOf (tepat satu), anyOf (paling sedikit satu), allOf (semuanya), not (kebalikannya). Plus enum untuk daftar terbatas nilai yang diizinkan dan const untuk satu nilai tetap.

Apa yang Bisa dan Tidak Bisa Diberi Tahu Skema Auto-Generated kepada Anda

Menyimpulkan skema dari satu contoh JSON itu kuat tetapi terbatas. Generator dapat mendeteksi:

Tidak dapat mendeteksi:

Perlakukan keluaran sebagai titik awal yang 70% jadi. Tambahan bernilai (kolom mana yang benar-benar wajib, format string apa yang berlaku, kisaran nilai apa yang diizinkan, makna setiap kolom) adalah langkah kurasi manusia.

Dua Jebakan Halus yang Patut Diketahui

JSON Schema vs Zod / Joi / Yup vs Tipe TypeScript

Beberapa teknologi tumpang tindih dengan peran JSON Schema; masing-masing punya titik kuat sendiri:

Jika skema Anda perlu dikonsumsi oleh banyak bahasa atau alat (IDE, perkakas OpenAPI, generator kode), JSON Schema adalah rumah yang tepat. Jika Anda tetap di dalam satu bahasa, opsi native bahasa itu biasanya lebih enak ditulis.

Kasus Penggunaan Umum

Kesalahan Umum

  1. Memperlakukan skema auto-generated sebagai spesifikasi final. Itu hanyalah titik awal. Tambahkan petunjuk format, tandai kolom yang benar-benar opsional, tambahkan dokumentasi, set kisaran nilai.
  2. Melewatkan deklarasi $schema. Validator memakainya untuk tahu draf mana yang diterapkan. Selalu sertakan di bagian atas skema.
  3. Memperlakukan required sebagai atribut per-properti. Tidak seperti XSD atau skema Mongoose, required di JSON Schema adalah sebuah array di tingkat objek induk yang mencantumkan nama properti yang wajib.
  4. Lupa additionalProperties: false ketika Anda ingin validasi ketat. Bawaannya true, artinya kunci tak dikenal diam-diam diizinkan.
  5. Mengacaukan enum dengan examples. enum = daftar nilai yang diizinkan (validasi). examples = nilai contoh hanya untuk dokumentasi (tanpa efek validasi).
  6. Mengasumsikan format ditegakkan. Secara bawaan di Draft 2020-12 ia adalah anotasi, bukan asersi; regex email Anda tidak akan jalan kecuali Anda memilih untuk mengaktifkannya.
  7. Menyimpulkan opsionalitas dari satu contoh. Setiap kunci di contoh Anda menjadi wajib secara bawaan. Spesifikasi nyata hampir selalu punya kolom opsional; hapus mereka dari array required sebagai bagian dari kurasi.

Lebih Banyak Pertanyaan yang Sering Diajukan

Apakah skema akan bekerja dengan OpenAPI 3.1?

Ya. OpenAPI 3.1 (dirilis Februari 2021) menyelaraskan bahasa skemanya sepenuhnya dengan JSON Schema Draft 2020-12, yang dipancarkan generator ini. Letakkan skema di components.schemas di dokumen OpenAPI Anda dan rujuk lewat $ref. OpenAPI 3.0 lebih lama memakai subset sebelumnya; Anda mungkin perlu menyesuaikan jika menargetkan 3.0.

Bisakah saya menghasilkan tipe di bahasa saya dari skema ini?

Ya. quicktype menghasilkan TypeScript, Go, Python, Java, C#, Swift, Kotlin, Rust, Elm, dan lainnya dari sebuah JSON Schema. json-schema-to-typescript adalah alternatif khusus JS. Sebagian besar bahasa modern memiliki setidaknya satu alat skema-ke-tipe; skema yang dihasilkan berfungsi sebagai masukan untuk mereka semua.

Apa beda antara $defs dan definitions?

Keduanya adalah tempat untuk meletakkan sub-skema yang dapat dipakai ulang dan dapat Anda $ref di tempat lain di dokumen. definitions adalah nama warisan, dipakai di Draft 04, 06, dan 07. $defs adalah nama saat ini, diperkenalkan di Draft 2019-09 dan berlanjut di 2020-12. Setara secara fungsi, tetapi gunakan $defs untuk pekerjaan baru.

Apakah JSON saya dikirim ke mana pun?

Tidak. Pembuatan skema berjalan sepenuhnya di peramban Anda. JSON yang ditempel diurai secara lokal, ditelusuri, dan dipancarkan sebagai skema di textarea keluaran. Tidak ada yang diunggah ke server, dicatat, atau disimpan setelah Anda menutup tab. Ini penting karena contoh JSON sering berisi data nyata (rekaman pelanggan, respons API internal, info pegawai) yang tidak ingin Anda alirkan lewat pihak ketiga.

Kenapa skema array saya hanya menggambarkan elemen pertama?

Inferensi dari satu contoh memperlakukan array sebagai homogen: melihat elemen pertama dan mengasumsikan sisanya cocok. Jika array sebenarnya dapat menahan bentuk berbeda, Anda perlu menulis items sebagai { "oneOf": [...] } dengan tangan. Atau jalankan generator pada setiap varian secara terpisah dan gabungkan skemanya.

Apakah saya perlu memakai generator sama sekali, atau menulis skema dengan tangan?

Untuk skema kecil yang Anda kendalikan dari ujung ke ujung, menulis dengan tangan mengajarkan Anda spesifikasi lebih cepat. Untuk respons API besar dengan puluhan objek bersarang, generasi membawa Anda ke draf dalam hitungan detik dan Anda habiskan waktu yang dihemat untuk merawat batasan, deskripsi, dan array required. Sebagian besar pengembang yang bekerja melakukan keduanya: hasilkan, lalu rawat.

Alat terkait

Pemformat & Validator JSON Gratis Online JSON Bandingkan JSON ke YAML Konverter