Materi
Di misi sebelumnya field yang hilang tercatat sebagai salah tipe. JSON Schema memisahkan dua masalah itu ke tiga kata kunci objek. properties memasangkan nama field dengan skemanya, tetapi hanya memeriksa field yang memang ada di data: dokumentasi Understanding JSON Schema menegaskan field di properties tidak wajib secara bawaan, sehingga objek kosong pun lolos. required berisi daftar nama field yang wajib ada. additionalProperties mengatur field yang tidak disebut di properties; secara bawaan field lain diizinkan, dan nilai false melarangnya.
{
"type": "object",
"properties": {
"nomor": { "type": "string" },
"nama": { "type": "string" },
"denda": { "type": "integer" }
},
"required": ["nomor", "nama"],
"additionalProperties": false
}Field yang bernilai null tetap ada. Spesifikasi validasi menyatakan objek lolos required bila setiap nama di daftar itu adalah nama properti di objek, tanpa melihat nilainya. Jadi anggota perpustakaan { "nomor": null, "nama": "Sari" } lolos required, lalu gagal di type milik nomor. Kedua pelanggaran dilaporkan berbeda karena perbaikannya berbeda: field hilang berarti server lupa mengirim, null berarti server mengirim nilai kosong.
Di JavaScript, keberadaan field diperiksa dengan Object.hasOwn(data, nama). Pemeriksaan if (data[nama]) menganggap 0, teks kosong, dan false sebagai field hilang, sedangkan operator in ikut menemukan nama warisan seperti toString dan constructor.