Format JSON apa yang merupakan pilihan yang lebih baik untuk pasangan nilai kunci dan mengapa?
[{"key1": "value1"}, {"key2": "value2"}]
Atau:
[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]
Atau:
{"key1": "value1", "key2": "value2"}
Varian pertama tampaknya lebih kompak dan lebih "bermakna secara semantik". Varian kedua tampaknya lebih terstruktur yang mungkin membantu memprosesnya. Varian ke-3 tampaknya lebih semantik.
Pasangan nilai kunci akan digunakan untuk melampirkan data acak ke beberapa item lainnya. Data harus diserialisasi sebagai JSON untuk membulatkannya melalui sistem.
{"key1": "value1", "key2": "value2"}
?Jawaban:
Apakah Anda memilih opsi pertama atau ketiga tergantung pada use case Anda. Jika Anda memodelkan banyak contoh berbeda dari jenis benda yang sama, pilih yang pertama. Misalnya, Anda memiliki daftar orang. Jika Anda memodelkan banyak atribut berbeda dari satu hal, pilih yang ketiga. Anda dapat memiliki kunci berulang dalam format pertama, tetapi tidak dalam format ketiga.
Opsi kedua mengerikan, dan saya belum menemukan use case yang sesuai untuk itu. Alasannya mengerikan, selain lebih bertele-tele, adalah untuk JSON satu tingkat, ini memecah konversi otomatis sebagian besar perpustakaan ke kamus / peta. Untuk JSON yang sangat bersarang, ia merusak antarmuka permintaan seperti XPath .
Ini membuatnya sulit untuk diajak bekerja sama. Dan jika Anda tidak tahu kunci Anda pada waktu kompilasi, Anda akan menginginkan kamus atau antarmuka XPath, karena Anda tidak akan dapat mengubahnya menjadi sebuah kelas. Ini mungkin tidak tampak seperti masalah besar sekarang, tetapi semakin lama Anda memiliki format data, semakin sulit untuk berubah.
sumber
[{"key1": "value1", "key2": "value2"}]
. Format kedua di sini adalah meletakkan kunci nyata di sisi kanan, dan menggunakan kunci lain yang disebut "Nama" untuk mengarahkan Anda ke kunci nyata, sehingga sangat sulit untuk mengurai dengan alat standar.Format ke-3 secara umum adalah yang terbaik. Namun, berikut adalah contoh dari sesuatu yang cocok untuk format pertama:
Di sini setiap objek merujuk ke hal yang terpisah (dan setiap objek menggunakan kunci yang sama dengan yang lain, sehingga mereka tidak dapat digabung). Namun, setiap objek dalam daftar disimpan
{ "username": "foo", "id": 1 }
bukan[{ "username": "foo" }, { "id": 1 }]
karena 1) lebih pendek dan 2) merujuk pada satu hal dengan nama pengguna dan id, bukan satu hal dengan nama pengguna dan hal lain dengan id.Masalah dengan opsi kedua adalah bahwa itu menjadi sangat bertele-tele baik sebagai JSON dan untuk bekerja dengannya. Namun, ini dapat digunakan jika Anda perlu menyimpan meta-informasi tentang properti. Sebuah contoh:
Di sini
mutable
merujuk pada kasus hipotetis apakah Anda dapat memodifikasi properti itu sendiri, bukan objek induknya. Meta-informasi seperti ini mirip dengan JavaScriptObject.defineProperty
, yang menyimpan informasi "dapat dikonfigurasi", "enumerable", dan "dapat ditulis" tentang properti.sumber
Anda mengatakan ini adalah pasangan kunci / nilai. Dalam hal itu, gunakan # 3: kamus pasangan kunci / nilai.
Jika ini bukan pasangan kunci / nilai, maka jangan menyebutnya "kunci" dan "nilai" dan gunakan # 2, array kamus dengan konten yang berubah-ubah.
Struktur # 1 hanya gila kecuali Anda membutuhkan pasangan kunci / nilai tetapi juga pesanan mereka. Yang jarang kamu lakukan.
sumber
Tempatkan diri Anda pada posisi orang yang menerima json. Jika saya tidak tahu nama kuncinya, bagaimana saya bisa mengambilnya dengan format pertama atau terakhir? Anda dapat mengulang melalui json tentu saja tetapi karena ketiga format mencapai hasil yang sama itu hanya masalah sintaksis. Saya pikir ini adalah satu-satunya pertanyaan yang bermakna: jika Anda tahu nama-nama kunci pilihan pertama atau terakhir lebih kompak, jika bukan pilihan kedua lebih dimengerti.
sumber