JSON Toolkit

null atau hilangkan field

Intinya: `null` menyatakan field ada tanpa nilai; menghilangkannya menyatakan field tidak ada. Body PATCH, penggabungan config dan prefill form adalah tempat perbedaan ini menggigit.

Menengah±3 menit bacaDiterbitkan 2026-10-30Diperbarui 2026-10-30
Perbedaan semantik antara null dan field yang tidak ada

Intinya: kirim null saat konsumen harus membedakan "dikosongkan" dari "tidak disentuh" — dalam body PATCH, ketidakhadiran membiarkan field apa adanya dan null eksplisit mengosongkannya — dan pertahankan satu konvensi per field agar response dan penggabungan config tetap stabil.

Perbedaannya

{ "nickname": null }

Ada, kosong. Konsumen tahu field itu secara eksplisit dikosongkan.

{ }

Tidak ada. Konsumen tidak bisa membedakan "belum pernah diisi" dari "tidak didukung".

Di JavaScript perbedaannya konkret:

'nickname' in obj          // false — absent
obj.nickname === null      // true  — present and null
obj.nickname === undefined // true  — both cases

Di mana ini penting

Body PATCH. {"nickname": null} mengosongkan nickname. {} tidak mengubah apa pun. Jika handler memperlakukan "null" dan "hilang" sebagai hal yang sama, pengguna tidak akan pernah bisa mengosongkan field — mereka hanya bisa mengisinya dengan string kosong, yang merupakan hal berbeda.

Implementasikan dengan keberadaan key, bukan nilai:

if (Object.hasOwn(patch, 'nickname')) {
  target.nickname = patch.nickname;   // null allowed
}

Penggabungan config. Ketidakhadiran mewarisi default; null menonaktifkannya secara eksplisit. Inilah persis cara nilai Helm dan Kubernetes berperilaku.

Prefill form. null dirender sebagai kosong dan field yang hilang juga begitu, tetapi pengiriman berbeda: tadinya punya nilai, kini dikosongkan → kirim null; tidak pernah diisi → hilangkan. Tanpa perbedaan itu, mengosongkan tampak identik dengan tidak menyentuhnya.

Konvensi

Situasi Konvensi
Body response Pertahankan null; bentuk stabil, tipe lebih sederhana
Request PATCH null mengosongkan, ketidakhadiran mempertahankan
PUT (penggantian penuh) Ketidakhadiran berarti hapus — seluruh dokumen diganti
Penggabungan config Ketidakhadiran = default, null = dinonaktifkan
Database null untuk tidak diketahui atau tidak berlaku; '' untuk kosong yang diketahui

Jaga bentuk response tetap stabil. Daftar yang sebagian itemnya membawa avatar dan sebagian tidak memaksa pemeriksaan 'avatar' in item di setiap call site. avatar: null lebih mudah dikonsumsi.

Tiga hal yang jangan dilakukan

Jangan memakai "" untuk null. Nickname kosong dan nickname yang belum diisi adalah state berbeda di sebagian besar domain.

Jangan memakai 0 atau -1 sebagai sentinel. Nol adalah angka yang sah, dan sentinel itu merusak setiap rata-rata yang Anda hitung.

Jangan mencampur konvensi per endpoint. Dua konvensi berarti dua jalur kode di setiap klien.

FAQ

Apa yang menentukan antara null dan field yang dihilangkan?

Tanyakan apakah konsumen perlu membedakan "secara eksplisit dikosongkan" dari "belum pernah diisi". Dalam body PATCH harus, jadi null mengosongkan dan ketidakhadiran mempertahankan; dalam response, mempertahankan null membuat bentuknya stabil dan tipe klien lebih sederhana.

Bagaimana endpoint PATCH membedakan pengosongan dari pembiaran?

Periksa keberadaan key, bukan nilainya: Object.hasOwn(patch, 'nickname') memberi tahu bahwa field dikirim, dan hanya setelah itu tetapkan nilainya, termasuk null. Jika handler memperlakukan null dan hilang sebagai hal yang sama, pengguna tidak akan pernah bisa mengosongkan field dan hanya bisa jatuh ke string kosong.

Mengapa body response sebaiknya mempertahankan null?

Bentuk yang stabil berarti klien tidak perlu pemeriksaan 'avatar' in item untuk setiap key opsional. Ketika sebagian item daftar membawa avatar dan sebagian menghilangkannya, pemeriksaan itu terduplikasi di setiap call site dan mudah salah.

Bacaan lanjutan

Alat yang sesuai

Artikel terkait

Poin Penting dalam Mendesain Kontrak Data JSON API

Enam hal sangat sulit diubah setelah rilis: envelope respons, format error, bentuk pagination, representasi ID dan waktu, semantik null versus tidak ada, serta evolusi versi.

Menengah±13 menit bacaDiperbarui 2026-10-30

JSON Pointer, Patch, dan Merge Patch

Tiga spesifikasi singkat membentuk protokol perubahan: Pointer melokasikan, Patch mengedit secara tepat, Merge Patch menggabungkan sebagian. Salah memilih berdampak pada array dan konkurensi.

Menengah±12 menit bacaDiperbarui 2026-10-30

FAQ Penggunaan Alat: Data, Berkas, dan Ekspor

Apakah data diunggah, sebesar apa berkas yang bisa ditangani, apakah ada yang disimpan secara lokal, mengapa teks Tionghoa berubah menjadi escape: sepuluh pertanyaan yang menjabarkan batas nyata sebuah alat JSON online.

Pemula±10 menit bacaDiperbarui 2026-10-30