Apa perbedaan antara YAML dan JSON, khususnya mengingat hal-hal berikut?
- Performa (waktu encode / decode)
- Konsumsi memori
- Kejelasan ekspresi
- Ketersediaan perpustakaan, kemudahan penggunaan (Saya lebih suka C)
Saya berencana untuk menggunakan salah satu dari dua ini di sistem tertanam kami untuk menyimpan file konfigurasi.
Terkait:
Haruskah saya menggunakan YAML atau JSON untuk menyimpan data Perl saya?
Jawaban:
Secara teknis YAML adalah superset dari JSON. Ini berarti bahwa, secara teori setidaknya, parser YAML dapat memahami JSON, tetapi tidak harus sebaliknya.
Lihat spesifikasi resmi, di bagian berjudul "YAML: Relation to JSON" .
Secara umum, ada beberapa hal yang saya sukai tentang YAML yang tidak tersedia di JSON.
Dalam praktiknya, tak satu pun dari dua poin terakhir ini akan berpengaruh pada hal-hal yang Anda atau saya lakukan, tetapi dalam jangka panjang, saya pikir YAML akan menjadi format serialisasi data yang lebih kuat dan layak.
Saat ini, AJAX dan teknologi web lainnya cenderung menggunakan JSON. YAML saat ini lebih banyak digunakan untuk proses data offline. Sebagai contoh, ini disertakan secara default dalam paket visi komputer OpenCV berbasis C, sedangkan JSON tidak.
Anda akan menemukan perpustakaan C untuk JSON dan YAML. Perpustakaan YAML cenderung lebih baru, tapi saya tidak punya masalah dengan mereka di masa lalu. Lihat misalnya Yaml-cpp .
sumber
Perbedaan:
{a: &b [*b]}
yang akan berulang dalam beberapa konverter. Bahkan dengan deteksi melingkar, "bom yaml" masih dimungkinkan (lihat bom xml ).Pengamatan:
sumber
Melewati teori esoterik
Ini menjawab judul, bukan detail karena kebanyakan hanya membaca judul dari hasil pencarian di google seperti saya, jadi saya merasa perlu untuk menjelaskan dari perspektif pengembang web .
Gajah di dalam ruangan: Internet itu sendiri
JavaScript dengan jelas mendominasi web dengan margin yang besar dan pengembang JavaScript lebih suka menggunakan JSON karena format data sangat banyak bersama dengan API web populer sehingga menjadi sulit untuk berdebat menggunakan YAML di atas JSON saat melakukan pemrograman web dalam pengertian umum karena Anda kemungkinan akan kalah suara dalam lingkungan tim. Faktanya, sebagian besar programmer web bahkan tidak menyadari YAML, apalagi mempertimbangkan untuk menggunakannya.
Jika Anda melakukan pemrograman web apa pun, JSON adalah cara default untuk digunakan karena tidak diperlukan langkah penerjemahan saat bekerja dengan JavaScript maka Anda harus membuat argumen yang lebih baik untuk menggunakan YAML daripada JSON dalam kasus itu.
sumber
Pertanyaan ini berumur 6 tahun, tetapi anehnya, tidak ada jawaban yang benar-benar menjawab keempat poin (kecepatan, memori, ekspresif, portabilitas).
Kecepatan
Jelas ini tergantung pada implementasi, tetapi karena JSON digunakan secara luas, dan sangat mudah diimplementasikan, ia cenderung menerima dukungan asli yang lebih besar, dan karenanya mempercepat. Mempertimbangkan bahwa YAML melakukan semua yang JSON lakukan, ditambah satu truk lebih banyak, kemungkinan implementasi yang sebanding dari keduanya, JSON satu akan lebih cepat.
Namun, mengingat bahwa file YAML bisa sedikit lebih kecil daripada rekan JSON-nya (karena lebih sedikit
"
dan,
karakter), mungkin saja pengurai YAML yang sangat dioptimalkan mungkin lebih cepat dalam keadaan luar biasa.Penyimpanan
Pada dasarnya argumen yang sama berlaku. Sulit untuk melihat mengapa parser YAML akan lebih efisien memori daripada parser JSON, jika mereka mewakili struktur data yang sama.
Ekspresi
Seperti dicatat oleh orang lain, programmer Python cenderung lebih memilih YAML, programmer JavaScript menuju JSON. Saya akan melakukan pengamatan ini:
Portabilitas
Sulit membayangkan bahasa modern tanpa perpustakaan JSON. Sulit juga untuk membayangkan parser JSON mengimplementasikan sesuatu yang kurang dari spesifikasi lengkap. YAML memiliki dukungan luas, tetapi kurang di mana-mana dari JSON, dan masing-masing parser mengimplementasikan subset yang berbeda. Oleh karena itu file YAML kurang dapat dioperasikan daripada yang Anda kira.
Ringkasan
JSON adalah pemenang untuk kinerja (jika relevan) dan interoperabilitas. YAML lebih baik untuk file yang dikelola manusia. HJSON adalah kompromi yang layak meskipun dengan portabilitas yang jauh berkurang. JSON5 adalah kompromi yang lebih masuk akal, dengan sintaks yang jelas.
sumber
GIT dan YAML
Jawaban lainnya bagus. Baca yang pertama. Tapi saya akan menambahkan satu alasan lain untuk menggunakan YAML kadang-kadang: git .
Semakin banyak proyek pemrograman yang menggunakan repositori git untuk distribusi dan pengarsipan. Dan, sementara sejarah git repo dapat menyimpan file JSON dan YAML, metode "diff" yang digunakan untuk melacak dan menampilkan perubahan pada file berorientasi pada garis. Karena YAML dipaksa berorientasi garis, setiap perubahan kecil pada file YAML lebih mudah dilihat oleh manusia.
Memang benar, tentu saja, file JSON dapat "dibuat cantik" dengan menyortir string / kunci dan menambahkan lekukan. Tapi ini bukan default dan saya malas.
Secara pribadi, saya biasanya menggunakan JSON untuk interaksi sistem-ke-sistem. Saya sering menggunakan YAML untuk file konfigurasi, file statis, dan file yang dilacak. (Saya juga umumnya menghindari menambahkan jangkar relasional YAML. Hidup ini terlalu singkat untuk memburu loop.)
Juga, jika kecepatan dan ruang benar-benar memprihatinkan, saya juga tidak menggunakan. Anda mungkin ingin melihat BSON.
sumber
Saya menemukan YAML lebih mudah di mata: kurung kurang, "" dll. Meskipun ada gangguan tab di YAML ... tetapi orang bisa menguasainya.
Dalam hal kinerja / sumber daya, saya tidak akan mengharapkan perbedaan besar antara keduanya.
Lebih lanjut, kita berbicara tentang file konfigurasi dan jadi saya tidak akan mengharapkan aktivitas encode / decode frekuensi tinggi, bukan?
sumber
Jika Anda tidak memerlukan fitur apa pun yang YAML miliki dan JSON tidak, saya lebih suka JSON karena sangat sederhana dan didukung secara luas (memiliki banyak perpustakaan dalam banyak bahasa). YAML lebih kompleks dan kurang mendukung. Saya tidak berpikir kecepatan parsing atau penggunaan memori akan sangat jauh berbeda, dan mungkin bukan bagian besar dari kinerja program Anda.
sumber
Secara teknis YAML menawarkan lebih banyak daripada JSON (YAML v1.2 adalah superset dari JSON):
jangkar dan warisan - contoh 3 item identik:
Sebagian besar waktu orang tidak akan menggunakan fitur-fitur tambahan dan perbedaan utamanya adalah bahwa YAML menggunakan lekukan sementara JSON menggunakan tanda kurung . Ini membuat YAML lebih ringkas dan mudah dibaca (untuk mata yang terlatih).
Yang mana yang harus dipilih?
sumber
Karena pertanyaan ini sekarang memiliki fitur yang jelas ketika mencari YAML dan JSON, ada baiknya perhatikan satu perbedaan yang jarang dikutip antara keduanya: lisensi. JSON bermaksud untuk memiliki lisensi yang harus dipatuhi oleh pengguna JSON (termasuk yang ambigu secara hukum "harus digunakan untuk yang Baik, bukan yang Jahat"). YAML tidak membawa klaim lisensi seperti itu, dan itu mungkin merupakan perbedaan penting (untuk pengacara Anda, jika tidak kepada Anda).
sumber
{ "": #, [] }
???Terkadang Anda tidak perlu memutuskan untuk memilih yang satu dengan yang lain.
Di Go, misalnya, Anda dapat memiliki keduanya sekaligus:
sumber
Dari: Buku Arnaud Lauret "Desain API Web." :
Format data JSON
JSON adalah format data teks berdasarkan bagaimana bahasa pemrograman JavaScript menggambarkan data tetapi, terlepas dari namanya, sepenuhnya independen-bahasa (lihat https://www.json.org/ ). Menggunakan JSON , Anda bisa mendeskripsikan objek yang mengandung pasangan nama / nilai yang tidak berurutan dan juga array atau daftar yang berisi nilai yang diurutkan, seperti yang ditunjukkan pada gambar ini.
Suatu objek dibatasi oleh kurung kurawal ({}). Nama adalah string yang dikutip ("nama") dan dipisahkan dari nilainya oleh tanda titik dua (:). Nilai dapat berupa string seperti "nilai", angka seperti 1,23, Boolean (benar atau salah), nilai nol nol, objek, atau array. Array dibatasi oleh tanda kurung ([]), dan nilainya dipisahkan oleh koma (,). The JSON format mudah diurai menggunakan bahasa pemrograman. Ini juga relatif mudah dibaca dan ditulis. Ini diadopsi secara luas untuk banyak kegunaan seperti database, file konfigurasi, dan, tentu saja, API.
YAML
YAML (YAML Ain't Markup Language) adalah format serialisasi data yang ramah manusia. Seperti JSON, YAML ( http://yaml.org ) adalah format data kunci / nilai. Angka tersebut menunjukkan perbandingan keduanya.
Perhatikan poin-poin berikut:
Tidak ada tanda kutip ganda ("") di sekitar nama dan nilai properti di YAML .
Kurung kurawal struktural JSON ({}) dan koma (,) digantikan oleh baris baru dan lekukan di YAML .
Tanda kurung ([]) dan koma (,) diganti dengan tanda hubung (-) dan baris baru di YAML .
Tidak seperti JSON , YAML memungkinkan komentar yang dimulai dengan tanda pagar (#). Relatif mudah untuk mengubah salah satu format ke format lainnya. Namun demikian, Anda harus terlebih dahulu kehilangan komentar saat mengonversi dokumen YAML ke JSON .
sumber
Saya menemukan YAML dan JSON sangat efektif. Hanya dua hal yang benar-benar menentukan ketika satu digunakan untuk yang lain bagi saya adalah satu, apa bahasa yang paling populer digunakan. Misalnya, jika saya menggunakan Java, Javascript, saya akan menggunakan JSON. Untuk Java, saya akan menggunakan objek mereka sendiri, yang cukup banyak JSON tetapi kurang dalam beberapa fitur, dan mengubahnya menjadi JSON jika saya perlu atau membuatnya di JSON di tempat pertama. Saya melakukan itu karena itu adalah hal yang umum di Jawa dan membuatnya lebih mudah bagi pengembang Java lainnya untuk memodifikasi kode saya. Yang kedua adalah apakah saya menggunakannya untuk program mengingat atribut, atau jika program tersebut menerima instruksi dalam bentuk file konfigurasi, dalam hal ini saya akan menggunakan YAML, karena sangat mudah dibaca manusia, sudah bagus mencari sintaks, dan sangat mudah dimodifikasi, bahkan jika Anda tidak tahu cara kerja YAML. Kemudian, program akan membacanya dan mengubahnya menjadi JSON, atau apa pun yang lebih disukai untuk bahasa itu.
Pada akhirnya, itu jujur tidak masalah. Baik JSON dan YAML mudah dibaca oleh programmer mana pun yang berpengalaman.
sumber
JSON tidak dapat menangani data besar yang membandingkan yml
Tidak cocok untuk menangani berbagai format multimedia.
JSON tidak memiliki fitur untuk mendukung 'komentar'. Ini dapat dimasukkan sebagai atribut tambahan saja.
YAML memiliki beberapa kelebihan dibandingkan JSON seperti referensi-sendiri, dukungan untuk tipe data yang kompleks, literal blok yang disematkan, komentar dan banyak lagi.
sumber