JSON mendukung struktur data berikut (setara Java): Skalar, Array / Daftar, dan Peta.
A Set
tidak didukung di luar kotak di JSON.
Saya memikirkan beberapa cara untuk mewakili satu set di JSON:
[1] - Sebagai daftar
Namun, daftar memiliki urutannya sendiri, jadi dua daftar berikut, ["a", "b"]
dan ["b", "a"]
tidak sama dengan daftar, tetapi mereka harus sama dengan set.
[2] - Sebagai peta
Gunakan kunci-set peta, dan abaikan nilainya.
Tetapi sekali lagi, menggunakan perbandingan standar, keduanya tidak sama dengan peta:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Sebagai peta, dengan nilai khusus
Ambil skalar, katakan 0
atau null
dan paksakan untuk menjadi nilai setiap kunci di peta:
{"a": 0, "b": 0}
Dengan cara ini, di bawah alat perbandingan standar, objek sama, bahkan jika urutan kunci diubah.
Namun, teknik ini mencemari dokumen JSON dengan data yang tidak relevan.
[4] - Sebagai daftar yang dipesan
Kembali ke saran pertama, tetapi kali ini sebagai daftar yang dipesan. Jenis ini memecahkan masalah perbandingan.
Namun, kami juga harus mempertimbangkan kompleksitas pengurutan, dan juga bahwa notasi peta menangani duplikat, sementara daftar yang diurutkan tidak. Contoh:
{"a": 400, "a": 9}
ditangani sebagai {"a": 9}
, tetapi ["g", "g"]
akan selalu demikian ["g", "g"]
.
Setelah mengatakan semua itu, tampaknya bagi saya bahwa notasi daftar lebih jelas, tetapi notasi peta lebih kuat untuk duplikasi kunci, dan membuatnya lebih sulit untuk konsisten tentang nilai khusus (meskipun null
sepertinya pilihan yang baik untuk itu).
Bagaimana menurut anda? Bagaimana Anda mewakili satu set di JSON?
PS
Perhatikan bahwa pertanyaan ini hanya tentang JSON. Saya tahu bahwa format lain, seperti yaml, tersedia. Masih...