Saya membuat API yang mengembalikan hasil sebagai JSON. Apakah ada praktik terbaik saat ini tentang apakah kita harus menyertakan kunci dalam hasil jika nilainya null? Sebagai contoh:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
atau
{
"title":"Foo Bar",
"author":"Joe Blow"
}
Karena yang kedua lebih kecil, saya cenderung ke gaya ini, tetapi saya tidak yakin apakah ada gaya yang disukai atau tidak. Dari perspektif klien, sepertinya kedua gaya tersebut akan secara fungsional setara. Ada pro atau kontra untuk masing-masing?
javascript
json
null
undefined
jjathman.dll
sumber
sumber
Jawaban:
Yang kedua akan menghemat sedikit bandwidth, tetapi jika itu menjadi perhatian Anda juga akan menggunakan array yang diindeks daripada mengisi JSON dengan kunci. Jelas,
["Foo Bar","Joe Blow"]
jauh lebih singkat dari yang Anda miliki sekarang.Dalam hal kegunaan, saya rasa tidak ada bedanya. Dalam kedua kasus,
if(json.isbn)
akan melompat keelse
. Biasanya tidak perlu membedakan antaranull
(tidak ada nilai) danundefined
(tidak ada nilai yang diberikan).sumber
!= null
(dimaksudkan tidak ketat)if( typeof onbeforepaste == "undefined")
untuk melihat apakahonBeforePaste
didukung. Meskipun demikian, tidak ada bedanya karena Anda dapat menetapkan acara semau Anda (mereka tidak akan melakukan apa pun jika tidak didukung).Saya penggemar selalu menyertakan null secara eksplisit karena itu membawa makna. Sementara menghilangkan properti meninggalkan ambiguitas.
Selama protokol Anda dengan server disetujui, semua hal di atas dapat berfungsi, tetapi jika Anda mengirimkan null dari server, saya yakin itu akan membuat API Anda lebih fleksibel nanti.
Juga harus disebutkan bahwa fungsi hasOwnProperty javascript memberi Anda wawasan lebih lanjut.
/* if true object DOES contain the property with *some* value */ if( objectFromJSON.hasOwnProperty( "propertyName" ) ) /* if true object DOES contain the property and it has been set to null */ if( jsonObject.propertyName === null ) /* if true object either DOES NOT contain the property OR object DOES contain the property and it has been set to undefined */ if( jsonObject.propertyName === undefined )
sumber
"propertyName" in objectFromJSON
sebagai gantinyaobjectFromJSON.hasOwnProperty("propertyName")
. Juga, jika Anda bersikeras menggunakanhasOwnProperty
maka tulislahObject.prototype.hasOwnProperty.call(objectFromJSON, "propertyName")
untuk keamanan.Dalam JavaScript,
null
artinya sesuatu yang sangat berbeda dariundefined
.Keluaran JSON Anda harus mencerminkan apa yang digunakan dan dibutuhkan oleh aplikasi Anda dalam konteks spesifik penggunaan data JSON.
sumber
{"prop":undefined}
berbeda dari{}
.Anda pasti harus memasukkannya jika ada kebutuhan untuk membedakan antara
null
danundefined
karena keduanya memiliki dua arti yang berbeda dalam Javascript. Anda dapat menganggapnull
properti itu tidak diketahui atau tidak berarti, danundefined
sebagai makna properti itu tidak ada.Di sisi lain, jika tidak ada orang yang perlu membuat perbedaan itu, lanjutkan saja dan tinggalkan.
sumber
Saya rasa tidak ada bedanya jika Anda menggunakan JSON sebagai data di balik pengalaman pengguna.
Perbedaannya muncul di file JSON-config, ketika pengguna harus mengedit sesuatu dengan tangan. Saat Anda menggunakan contoh pertama, Anda memberi pengguna beberapa petunjuk tentang konfigurasi.
sumber