ToolDeck

JSON Schema Validator

Validasi data JSON terhadap JSON Schema (Draft 7)

Coba contoh

Data JSON

JSON Schema

Berjalan lokal · Aman untuk menempel rahasia
Berjalan lokal · Aman untuk menempel rahasia

Apa itu Validasi JSON Schema?

Validasi JSON Schema adalah proses memeriksa apakah sebuah dokumen JSON sesuai dengan sekumpulan batasan struktural dan nilai yang didefinisikan dalam JSON Schema. Schema itu sendiri adalah dokumen JSON yang menggambarkan bentuk data yang diharapkan: properti mana yang wajib ada, tipe apa yang harus dimiliki, rentang yang diizinkan untuk angka, pola string, panjang array, dan banyak lagi. Spesifikasi JSON Schema dikelola di json-schema.org dan diterbitkan sebagai serangkaian draft IETF, dengan Draft 7 dan Draft 2020-12 yang paling banyak diadopsi.

Validasi JSON biasa hanya memeriksa sintaks (apakah tanda kurung sudah sesuai? apakah string dikutip dengan benar?), sedangkan validasi schema melangkah lebih jauh. Validasi schema menjawab pertanyaan seperti: apakah respons dari API ini mengandung field "id" yang selalu berupa integer? Apakah field "status" adalah salah satu dari tiga nilai yang diizinkan? Apakah objek bersarang berbentuk dengan benar? Jenis verifikasi struktural ini menangkap bug yang luput dari pemeriksaan sintaks sepenuhnya, karena JSON yang valid secara sintaks tetap bisa salah secara semantik untuk aplikasi Anda.

JSON Schema digunakan dalam definisi OpenAPI/Swagger, validasi file konfigurasi, validasi formulir, batasan dokumen basis data, dan pengujian otomatis. Alat seperti Ajv (JavaScript), jsonschema (Python), dan check-jsonschema (CLI) mengimplementasikan spesifikasi ini sehingga Anda dapat memvalidasi data secara terprogram. Validator online ini memungkinkan Anda menempelkan schema dan dokumen data untuk memeriksa kesesuaian secara langsung, tanpa menginstal library apa pun.

Mengapa Menggunakan Validator JSON Schema Online?

Menulis schema dan men-debug error validasi secara manual membutuhkan waktu lama. Validator JSON Schema online memberikan umpan balik instan apakah data Anda sesuai dengan schema, disertai pesan error yang jelas menunjukkan properti mana yang gagal.

Umpan balik validasi instan
Tempel schema dan data Anda, lalu lihat hasil validasi secara real-time. Setiap error menampilkan path JSON dan batasan spesifik yang gagal, sehingga Anda dapat memperbaiki masalah tanpa harus membaca output library validator.
🔒
Pemrosesan di browser, privasi terjaga
Data JSON Anda tidak pernah meninggalkan browser. Semua validasi berjalan secara lokal di JavaScript. Tidak ada server, tidak ada log, tidak ada penyimpanan data. Aman untuk schema yang mendeskripsikan API internal atau mengandung nama field yang bersifat rahasia.
🎯
Validasi berbasis draft
Validator menangani kata kunci schema Draft 7 termasuk type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf, dan additionalProperties. Uji schema Anda di sini sebelum menghubungkannya ke pipeline build atau test suite.
📋
Tanpa akun atau instalasi
Buka halaman, tempel JSON Anda, dan validasi. Tanpa npm install, tanpa paket pip, tanpa Docker image. Berguna saat Anda butuh pemeriksaan schema cepat di mesin yang tidak dapat menginstal alat pengembangan.

Kasus Penggunaan Validasi JSON Schema

Pengujian kontrak API
Validasi respons API terhadap schema yang didefinisikan dalam spesifikasi OpenAPI Anda. Tangkap perubahan yang merusak, seperti field yang berubah dari integer ke string, sebelum sampai ke produksi.
Verifikasi file konfigurasi
Pastikan file konfigurasi JSON untuk pipeline CI/CD, Kubernetes manifest, atau pengaturan aplikasi sesuai dengan schema yang diharapkan sebelum di-commit. Mencegah kegagalan deployment akibat kunci yang hilang atau salah ketik.
Gerbang pipeline DevOps
Tambahkan validasi schema sebagai langkah CI untuk menolak payload yang melanggar kontrak. Ini berlaku untuk file variabel Terraform, input GitHub Actions, atau JSON terstruktur apa pun yang dikonsumsi oleh otomatisasi.
Tinjauan data QA dan data uji
Verifikasi bahwa fixture pengujian dan file data mock sesuai dengan schema yang sama yang diharapkan aplikasi Anda. Data uji yang tidak sesuai adalah sumber umum hasil pengujian false-positive.
Ingesti pipeline data
Validasi rekaman JSON yang masuk di tepi pipeline data. Validasi schema menyaring event yang tidak sesuai format sebelum mencapai data warehouse, mengurangi biaya pembersihan di hilir.
Belajar sintaks JSON Schema
Bereksperimen dengan kata kunci schema secara interaktif. Tulis schema, tempel data uji, dan lihat batasan mana yang lulus atau gagal. Lebih cepat daripada menulis skrip dan menjalankannya dari terminal setiap kali.

Referensi Kata Kunci JSON Schema

JSON Schema dibangun dari kata kunci yang masing-masing memberlakukan batasan pada data yang divalidasi. Tabel di bawah mencantumkan kata kunci yang paling umum digunakan dalam Draft 7 dan setelahnya. Setiap kata kunci dapat dikombinasikan dengan yang lain dalam objek schema yang sama.

Kata KunciTujuanContoh
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Perbandingan Draft JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema telah melalui beberapa versi draft. Draft 7 (diterbitkan 2018) paling banyak didukung oleh alat yang ada. Draft 2019-09 memperkenalkan $defs (menggantikan definitions), unevaluatedProperties, dan $recursiveRef. Draft 2020-12 (rilis stabil terbaru) mengganti $recursiveRef dengan $dynamicRef dan memperkenalkan prefixItems untuk validasi tuple. Saat memilih draft, pastikan library validasi Anda mendukungnya. Ajv mendukung ketiga draft. Library jsonschema Python mendukung hingga 2020-12 sejak versi 4.0.

FiturDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Contoh Kode

Contoh-contoh ini menunjukkan cara memvalidasi JSON terhadap schema secara terprogram. Masing-masing menggunakan library yang terawat baik untuk ekosistem bahasanya.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Pertanyaan yang Sering Diajukan

Apa perbedaan antara validasi JSON dan validasi JSON Schema?
Validasi JSON memeriksa apakah sebuah string merupakan sintaks JSON yang valid: tanda kurung yang tersusun dengan benar, kunci yang dikutip, tidak ada koma di akhir. Validasi JSON Schema melangkah lebih jauh dan memeriksa apakah data JSON yang telah di-parse sesuai dengan kontrak struktural: tipe yang benar, field wajib yang ada, nilai dalam rentang yang diizinkan. Anda memerlukan JSON yang valid sebelum dapat menerapkan schema, tetapi JSON yang valid tetap bisa gagal validasi schema.
Draft JSON Schema mana yang sebaiknya saya gunakan?
Draft 7 adalah pilihan paling aman. Draft ini memiliki dukungan library paling luas di berbagai bahasa dan mencakup kata kunci yang dibutuhkan sebagian besar proyek: type, properties, required, enum, pattern, anyOf, oneOf, allOf, dan $ref. Gunakan Draft 2020-12 jika Anda membutuhkan fitur seperti prefixItems untuk validasi tuple, $dynamicRef untuk schema yang dapat diperluas, atau unevaluatedProperties untuk bentuk objek yang ketat. Periksa dokumentasi library validator Anda untuk memastikan dukungan draft sebelum melakukan upgrade.
Bagaimana cara kerja $ref dalam JSON Schema?
Kata kunci $ref memungkinkan Anda mereferensikan schema lain melalui URI alih-alih menduplikasinya. Nilai seperti "$ref": "#/$defs/address" menunjuk ke schema yang didefinisikan di bagian $defs dari dokumen yang sama. Anda juga dapat mereferensikan file eksternal dengan "$ref": "https://example.com/schemas/address.json". Dalam Draft 7, $ref menggantikan semua kata kunci saudara dalam objek yang sama. Dalam Draft 2019-09 dan setelahnya, kata kunci saudara diterapkan bersama $ref.
Apa perbedaan antara anyOf, oneOf, dan allOf?
jsonSchemaValidatorContent.a4
Bisakah JSON Schema memvalidasi objek dan array bersarang?
Ya. Gunakan kata kunci properties untuk mendefinisikan schema bagi kunci objek bersarang, dan kata kunci items untuk mendefinisikan schema yang harus dipenuhi setiap elemen array. Anda dapat menyarangkan keduanya hingga kedalaman berapa pun. Untuk array di mana setiap posisi memiliki schema yang berbeda (tuple), gunakan prefixItems dalam Draft 2020-12 atau bentuk array dari items dalam Draft 7.
Apakah data yang saya tempel ke alat ini dikirim ke server?
Tidak. Validator berjalan sepenuhnya di browser Anda menggunakan JavaScript. Data JSON dan schema Anda tidak pernah dikirimkan ke server mana pun. Anda dapat memverifikasinya dengan membuka inspector jaringan browser saat menggunakan alat ini.
Bagaimana cara memvalidasi JSON Schema dalam pipeline CI/CD?
Gunakan validator CLI seperti check-jsonschema (Python/pip) atau ajv-cli (Node.js/npm). Keduanya menerima file schema dan satu atau lebih file data sebagai argumen. Tambahkan perintah validasi sebagai langkah dalam konfigurasi CI Anda. Jika validasi gagal, proses keluar dengan kode non-zero, yang memblokir pipeline. Untuk GitHub Actions, Anda juga dapat menggunakan action check-jsonschema secara langsung.