JSON Schema Validator
Validasi JSON terhadap JSON Schema apa pun secara instan di browser Anda. Mendukung Draft 2020-12, 2019-09, dan Draft-07 dengan pesan error berbasis path yang presisi. 100% privat — tanpa upload, tanpa akun, gratis.
Apa itu JSON Schema Validator?
JSON Schema Validator adalah program yang menerima dua dokumen JSON — dokumen data dan dokumen schema — dan melaporkan apakah data sesuai dengan kontrak schema. Schema mendeklarasikan tipe field, key required, rentang nilai, nilai enum yang diizinkan, pattern regex, dan aturan struktural menggunakan kosakata tetap (type, properties, required, items, enum, oneOf, allOf, $ref, format). Validator menelusuri kedua dokumen secara paralel dan menerbitkan nol atau lebih error, masing-masing terikat pada path JSON Pointer di dalam data.
Validasi berjalan saat runtime, di batas antara input yang tidak terpercaya dan kode Anda. Type TypeScript hilang saat compile-time dan tidak dapat membantu untuk JSON yang tiba dari webhook, API pihak ketiga, atau paste pengguna — celah itulah yang diisi JSON Schema. Padukan dengan TypeScript (atau Pydantic di Python) dan Anda mendapat jaminan compile-time di dalam codebase plus jaminan runtime di batas.
Draft 2020-12 adalah spesifikasi terbaru dan pilihan untuk proyek baru di 2026. Draft sebelumnya (2019-09, Draft-07, Draft-06, Draft-04) bertahan di codebase legacy — Draft-07 masih umum di Helm chart, settings VS Code, dan konfigurasi Ajv lama. OpenAPI 3.1 memakai Draft 2020-12 secara native; OpenAPI 3.0 memakai subset Draft 4.
Tool ini berjalan sepenuhnya di browser Anda. JSON, schema, dan output validasi tidak pernah meninggalkan mesin Anda — aman untuk kontrak API proprietary dan payload sensitif. Pointer $ref internal di-resolve otomatis; ref HTTP eksternal sengaja dinonaktifkan untuk menjaga privasi.
Bekerja dengan tool JSON yang berdekatan? Format JSON dengan JSON Formatter sebelum menempel; bandingkan dua dokumen JSON dengan JSON Diff; konversi dengan JSON to YAML dan YAML to JSON. Untuk validasi end-to-end di Node, Python, dan browser, lihat panduan validasi JSON Schema kami.
// A 5-line schema that catches three real bugs
const schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
};
// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
// /id → type: expected integer, got string
// /email → required: missing
// /age → maximum: 200 > 150
// In Node: new Ajv().compile(schema)(bad) // false; ajv.errors has the paths
// In Python: jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install Fitur Utama
Dukungan Multi-Draft
Draft 2020-12 (default), 2019-09, dan Draft-07. Mendeteksi draft otomatis dari URI $schema; selektor fallback untuk schema tanpa URI.
Error Berbasis Path Presisi
Setiap error berisi JSON Pointer (mis. /user/email/0), keyword yang gagal (type, required, pattern), dan pesan satu baris. Klik untuk melompat ke lokasi.
Validasi Live
Memvalidasi saat Anda mengetik. Error terbarui real-time sehingga Anda dapat beriterasi pada schema atau data tanpa harus melalui tombol Validate.
Cakupan Keyword Format
email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — format yang benar-benar Anda pakai, divalidasi dengan pattern yang battle-tested.
100% Berbasis Browser
Input tidak pernah meninggalkan mesin Anda. Tanpa upload, tanpa analitik atas yang Anda tempel, tanpa localStorage untuk JSON. Aman untuk kontrak proprietary dan payload sensitif.
Schema Sample, Sekali Klik
Preset yang dapat dimuat (form signup, webhook envelope, file konfigurasi, array of orders) membawa Anda ke validasi yang berfungsi dalam kurang dari lima detik.
Contoh
Object Valid — required + types
{
"id": 42,
"email": "alice@example.com",
"age": 30
} {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
} Schema mendeklarasikan id dan email sebagai required dan mengunci type. Data di atas lolos — setiap constraint terpenuhi. Coba hapus email atau ubah id menjadi string untuk melihat error berbasis path.
Tidak Valid — required hilang + type salah
{
"id": "42",
"age": 200
} {
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "maximum": 150 }
},
"required": ["id", "email"]
} Tiga error: /id adalah string bukan integer, /email hilang, /age (200) melebihi maximum 150. Setiap error melaporkan path JSON Pointer yang tepat sehingga Anda bisa memperbaiki data — atau melonggarkan schema — tanpa menebak.
Discriminated Union — oneOf dengan const
{
"type": "order.created",
"data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
} {
"oneOf": [
{
"properties": {
"type": { "const": "order.created" },
"data": {
"type": "object",
"properties": {
"orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
"totalUsd": { "type": "number", "minimum": 0 }
},
"required": ["orderId", "totalUsd"]
}
},
"required": ["type", "data"]
},
{
"properties": {
"type": { "const": "order.refunded" },
"data": { "type": "object", "required": ["refundId"] }
},
"required": ["type", "data"]
}
]
} Validasi webhook envelope. Cabang oneOf pertama cocok karena type adalah "order.created". Ubah type menjadi "order.refunded" atau rusak pattern orderId untuk melihat bagaimana oneOf melaporkan kegagalan per cabang.
Array of Objects — items + uniqueItems
[
{ "sku": "A1", "qty": 3 },
{ "sku": "B2", "qty": 5 },
{ "sku": "A1", "qty": 3 }
] {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
"qty": { "type": "integer", "minimum": 1 }
},
"required": ["sku", "qty"]
}
} Dua item identik byte-per-byte, jadi uniqueItems aktif. Item 0 dan 2 bertabrakan — validator melaporkan duplikat di root array. Berguna untuk menangkap duplikasi cart-line dan bug merge pada permintaan shipping.
Cara Penggunaan
- 1
Tempelkan JSON Schema Anda
Letakkan schema Anda di panel kanan. Validator mendeteksi draft otomatis dari URI $schema bila ada; jika tidak, pilih Draft 2020-12, 2019-09, atau Draft-07 dari toolbar.
- 2
Tempelkan data JSON Anda
Letakkan dokumen JSON yang ingin diperiksa di panel kiri. Validasi berjalan saat mengetik; input besar (>200 KB) beralih ke tombol Validate manual agar pengetikan tetap responsif.
- 3
Baca daftar error
Setiap error memiliki path JSON Pointer, keyword, dan pesan satu baris. Klik error untuk melompat ke lokasi di data Anda, perbaiki, dan saksikan jumlahnya menurun secara real time.
Jebakan Umum JSON Schema
Type: integer vs number
JSON Schema memperlakukan 1.0 sebagai number tapi bukan integer. Jika kontrak Anda menyebut integer, validator menolak 1.0 — meski sebagian besar bahasa menganggapnya sama dengan 1. Pilih number kecuali Anda benar-benar butuh integer.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "qty": 1 } schema: { "type": "integer" } → valid required di Level Nesting yang Salah
required harus berada di samping properties, bukan di dalamnya. Array required di dalam deklarasi property diam-diam diabaikan — validator tidak pernah menegakkannya.
{ "properties": { "name": { "type": "string", "required": true } } } { "properties": { "name": { "type": "string" } }, "required": ["name"] } Default additionalProperties Adalah True
Tanpa additionalProperties: false, schema bersifat terbuka — setiap key tambahan lolos. Lupa hal ini adalah alasan paling umum schema "menerima segalanya."
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "properties": { "id": { "type": "integer" } }, "additionalProperties": false } OpenAPI 3.0 nullable vs Type Array Draft 2020-12
OpenAPI 3.0 memakai nullable: true; Draft 2020-12 memakai type: ["string", "null"]. Mencampurnya menghasilkan schema yang terlihat benar tapi tidak pernah benar-benar memperbolehkan null.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "type": ["string", "null"] } in 2020-12: explicitly allows null Pattern Tanpa Anchor
Regex JSON Schema secara default cocok di mana saja — pattern: "^[A-Z]+$" mengikatnya ke seluruh string, sedangkan pattern: "[A-Z]+" cocok bila ada huruf kapital di mana pun.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
pattern: "^[A-Z]+$" accepts only: "HELLO"
oneOf padahal Maksudnya anyOf
oneOf mengharuskan tepat satu cabang cocok. Bila dua cabang menerima shape yang sama, oneOf gagal pada data yang akan lolos di anyOf — dan pesan errornya membingungkan ("matches more than one").
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → valid Kasus Penggunaan Umum
- Validasi Request API
- Tempel request body dan schema endpoint Anda sebelum deploy. Tangkap response 400 yang tidak tercakup test — field required hilang, type salah, angka di luar rentang.
- Verifikasi Payload Webhook
- Vendor mengirim payload yang ditolak handler Anda? Validasi payload aktual terhadap schema Anda, lalu terhadap schema yang diterbitkan vendor. Selisih antara keduanya adalah bug Anda.
- Linting File Konfigurasi
- package.json, tsconfig.json, helm values.yaml — setiap file konfigurasi memiliki schema publik. Tempel schema, tempel konfigurasi, temukan typo. Lewati trial-and-error.
- Pengujian Komponen OpenAPI
- Ambil komponen schema dari dokumen OpenAPI 3.1, tempel di sini, validasi payload sample. Lebih cepat daripada menyalakan mock server, deterministik, tanpa SDK.
- Pre-Flight Form Submission
- Tempel sample payload form sebelum menyambung validasi frontend. Konfirmasi bahwa schema menolak yang Anda kira ditolak, menerima yang Anda kira diterima, lalu kirim schema yang sama ke client dan server.
- Pemeriksaan Kontrak Data Pipeline
- Output ETL drift? Tempel sample row dan schema downstream. Identifikasi producer mana yang berubah dan key mana yang rusak sebelum pipeline retry 10.000 record.
Detail Teknis
- Sesuai Draft 2020-12
- Mengimplementasikan spesifikasi Draft 2020-12 yang dipublikasikan — keyword, sistem type, kosakata format. Diuji silang dengan output Ajv 8.x dan ajv-formats.
- Path Error JSON Pointer
- Error menggunakan JSON Pointer RFC 6901 (/user/email/0). Setiap kegagalan keyword menunjuk satu lokasi yang dapat diresolve di data — tanpa ambiguitas, tanpa string-search.
- Resolusi $ref Internal
- Meresolve pointer $ref di dalam satu dokumen (#/$defs/foo, #/properties/bar). Cycle dideteksi dan dilaporkan. $ref HTTP eksternal dinonaktifkan untuk privasi.
Praktik Terbaik
- Selalu Set additionalProperties: false
- Pada kontrak input (request body, file konfigurasi, queue message), key tidak dikenal biasanya bug — typo, field tak sengaja, atau probing penyerang. Tolak secara default.
- Gunakan $defs untuk Subschema yang Reusable
- Inline shape yang sama dua kali dan keduanya akan drift. Pindahkan definisi bersama ke $defs dan rujuk dengan $ref — satu source of truth, setiap perubahan berlaku di semua tempat.
- Validasi Sebelum Business Logic
- Jalankan validasi schema tepat setelah JSON.parse, sebelum menyentuh struktur yang sudah diparsing. Type narrowing, defaulting, dan persistence semuanya berasumsi kontrak terpenuhi — pastikan iya.
Pertanyaan yang Sering Diajukan
Apa itu validasi JSON Schema?
Draft JSON Schema mana yang didukung validator ini?
Bagaimana cara memvalidasi JSON terhadap schema?
Apa perbedaan antara validasi JSON Schema dan validasi syntax JSON?
Mengapa schema saya menolak JSON yang terlihat benar?
Apakah ini mendukung $ref dan referensi schema remote?
Apa fungsi additionalProperties: false?
Bagaimana cara memvalidasi JSON terhadap schema di Node.js atau Python?
Apa perbedaan antara oneOf, anyOf, dan allOf?
Apakah mendukung schema OpenAPI?
Mengapa validator mengatakan JSON Schema saya sendiri tidak valid?
Apakah tool mengirim JSON atau schema saya ke server?
Bisakah saya memvalidasi JSON Lines (NDJSON) atau beberapa dokumen?
Alat Terkait
Lihat semua alat →Decode & Encode Base64 Online — Konversi Instan di Browser
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
JSON Diff (Bandingkan)
Encoding & Pemformatan
Bandingkan dua file JSON langsung di browser Anda. Sorotan side-by-side, output RFC 6902 JSON Patch, abaikan field seperti timestamp dan ID. 100% privat, tanpa upload.
Format & Validasi JSON Online — Gratis, Cepat, Privat
Encoding & Pemformatan
Format, validasi, dan rapikan JSON langsung di browser Anda. Alat online gratis dengan deteksi error, minifikasi, dan salin sekali klik. 100% privat.
Konverter JSON ke YAML
Encoding & Pemformatan
Tempel JSON, dapatkan YAML seketika. Konversi langsung di browser. Siap untuk K8s/Compose, indentasi 2/4 spasi, penanganan kutipan otomatis. 100% privat.
Generator Kode QR — URL, WiFi, vCard, Email, SMS, Lokasi
Encoding & Pemformatan
Generator kode QR gratis. Buat QR statis untuk URL, WiFi, vCard, email & SMS. Unduh SVG & PNG. Tidak kedaluwarsa, tanpa pendaftaran, 100% di browser Anda.
URL Encoder & Decoder dengan URL Parser Bawaan
Encoding & Pemformatan
Decode atau encode URL online gratis secara real-time. Dual mode: encodeURI & encodeURIComponent, URL parser bawaan. Tanpa pendaftaran, 100% privat di browser.