Apa perbedaan antara YAML dan JSON?

735

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?

pierrotlefou
sumber
26
Ketahuilah bahwa JSON dapat dianggap sebagai bagian dari YAML: en.wikipedia.org/wiki/JSON#YAML
Charles
2
@ Charles, ya, tetapi mereka memiliki beberapa perbedaan halus: ajaxian.com/archives/json-yaml-its-getting-closer-to-truth
pierrotlefou
1
Karena YAML (kurang-lebih) adalah superset dari JSON, pertanyaan tentang kinerja tidak dapat dijawab tanpa asumsi apakah Anda akan menggunakan ekspresif itu. Jika Anda tidak membutuhkannya: seberapa cepat parser YAML membaca JSON? Jika Anda benar-benar membutuhkannya: berapa banyak parser JSON yang lebih lambat bila Anda mengizinkan representasi JSON yang mungkin lebih lama dari ide yang sama?
poolie
@jokoon Saya kira "Saya lebih suka perpustakaan C" (mis. libyaml)
dbr
4
Dokumen YAML bisa rumit dan sulit dibaca. Serangan "Billion laughs" dimungkinkan dengan YAML. Di sisi lain, objek kompleks, grafik dan struktur lainnya dapat diserialisasi secara efisien dalam YAML. Untuk format interchange dan struktur sederhana, JSON lebih disukai. Untuk serialisasi objek yang kompleks, atau untuk definisi tata bahasa, YAML mungkin lebih disukai.
Erik Aronesty

Jawaban:

656

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.

  • Seperti yang ditunjukkan oleh @jdupont , YAML secara visual lebih mudah dilihat. Sebenarnya homepage YAML itu sendiri valid YAML, namun mudah bagi manusia untuk membaca.
  • YAML memiliki kemampuan untuk mereferensikan item lain dalam file YAML menggunakan "jangkar." Dengan demikian dapat menangani informasi relasional seperti yang mungkin ditemukan dalam database MySQL.
  • YAML lebih kuat tentang menanamkan format serialisasi lain seperti JSON atau XML dalam file YAML.

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 .

AndyL
sumber
199
json bukan himpunan bagian (meskipun dekat), dan ketidaksesuaian menyebalkan ketika Anda encouter mereka. json libraries umumnya lebih cepat ... ( stackoverflow.com/questions/2451732/… ). pendukung yaml akan bersikeras bahwa itu adalah himpunan bagian. jika keterbacaan menjadi perhatian, gunakan yaml. jika interoperabilitas dan kecepatan menjadi perhatian, gunakan JSON.
Erik Aronesty
6
YAML adalah superset dari bentuk sintaks JSON tertentu. Artinya, jika Anda menggunakan JSON dengan cara yang kompatibel dengan YAML, maka itu adalah subset yang tepat. Seperti komentar Pierr di atas, spesifikasi ini [bertujuan untuk kompatibilitas] (ajaxian.com/archives/json-yaml-its-getting-closer-to-truth).
naught101
120
YAML juga mendukung komentar yang berguna.
Den
59
@ErikAronesty JSON dekat dengan himpunan bagian dari YAML 1.1, tetapi sejak YAML 1.2 sekarang menjadi himpunan bagian yang benar. YAML 1.2 terutama dirilis untuk memperbaiki beberapa ketidaksesuaian terakhir antara kedua spesifikasi.
00rometheus
64
Dari spec YAML 1.2 : "Tujuan utama revisi ini adalah untuk membuat YAML mematuhi JSON sebagai subset resmi."
Rich C
204

Perbedaan:

  1. YAML, tergantung pada bagaimana Anda menggunakannya, bisa lebih mudah dibaca daripada JSON
  2. JSON seringkali lebih cepat dan mungkin masih dapat dioperasikan dengan lebih banyak sistem
  3. Mungkin untuk menulis parser JSON "cukup bagus" dengan sangat cepat
  4. Kunci duplikat, yang berpotensi JSON valid, pasti YAML tidak valid.
  5. YAML memiliki banyak fitur, termasuk komentar dan jangkar relasional. Sintaks YAML karenanya cukup kompleks, dan bisa sulit dimengerti.
  6. Dimungkinkan untuk menulis struktur rekursif dalam yaml:, {a: &b [*b]}yang akan berulang dalam beberapa konverter. Bahkan dengan deteksi melingkar, "bom yaml" masih dimungkinkan (lihat bom xml ).
  7. Karena tidak ada referensi, mustahil untuk membuat cerita bersambung struktur yang kompleks dengan referensi objek di JSON. Oleh karena itu serialisasi YAML dapat lebih efisien.
  8. Di beberapa lingkungan pengkodean, penggunaan YAML dapat memungkinkan penyerang untuk mengeksekusi kode arbitrer .

Pengamatan:

  1. Pemrogram python pada umumnya penggemar berat YAML, karena penggunaan indentasi, alih-alih sintaks yang dikurung, untuk menunjukkan level.
  2. Banyak pemrogram menganggap keterikatan "makna" pada lekukan sebagai pilihan yang buruk.
  3. Jika format data akan meninggalkan lingkungan aplikasi, diuraikan dalam UI, atau dikirim dalam lapisan olahpesan, JSON mungkin merupakan pilihan yang lebih baik.
  4. YAML dapat digunakan, secara langsung, untuk tugas-tugas kompleks seperti definisi tata bahasa, dan seringkali merupakan pilihan yang lebih baik daripada menciptakan bahasa baru.
Erik Aronesty
sumber
9
Ini. Seluruh tujuan Yaml 1.2 adalah untuk menyelesaikan beberapa perbedaan kompatibilitas untuk membuat JSON subset yang ketat. Jika Anda yakin spek tersebut tidak mencapai tujuannya, Erik, harap tunjukkan contoh JSON valid yang melanggar spesifikasi YAML dan / atau parser parser YAML yang memenuhi standar 1.2.
SFEley
32
@SFEley Spec YAML mengatakan ada file JSON yang berpotensi valid yang akan menjadi YAML tidak valid. Tapi itu tidak mungkin digunakan secara nyata. "JSON's RFC4627 mensyaratkan bahwa kunci pemetaan hanya" HARUS "harus unik, sementara YAML bersikeras bahwa mereka" HARUS ". Secara teknis, YAML mematuhi spesifikasi JSON, memilih untuk memperlakukan duplikat sebagai kesalahan. Dalam praktiknya, karena JSON diam pada semantik duplikat seperti itu, satu-satunya file JSON portabel adalah mereka dengan kunci unik, yang karenanya file YAML valid. " - yaml.org/spec/1.2/spec.html#id2759572
David C. Bishop
9
Untuk mengomentari penggunaan indentasi; baik, saya percaya bahwa mungkin memerlukan membiasakan diri dan tidak semua orang menyukainya. Sebagai contoh, saya seorang. NET guy. Saya sedang melihat file travis.yml dan bertanya-tanya mengapa ada masalah. Saya menemukan bahwa saya memiliki tab di mana itu tidak boleh. Tidak semua orang terbiasa dengan hal-hal yang meledak karena preferensi spasi / tab / baris baru.
Phil
10
Tab sama sekali tidak diizinkan sebagai karakter lekukan. IMHO, itu gaya pengkodean yang baik dalam semua bahasa - dengan atau tanpa lekukan sintaksis.
00rometheus
6
@ Wyrwood Saya pribadi suka python dan YAML dan benar-benar menggunakannya setiap hari. Saya cenderung menggunakan YAML untuk hal-hal yang harus sering diedit orang dan JSON untuk hal-hal yang orang "mungkin" perlu lihat. Saya telah mengalami kritik yang valid oleh C ++ devs yang menemukan lekukan membingungkan .... terutama jika ada beberapa level atau blok fungsi yang lebih panjang. Tentu saja ... kode yang dapat diuji baik tidak memiliki hal-hal itu, jadi biasanya bukan masalah. Ini adalah pengamatan pribadi saya, tetapi setiap pencarian biasa Google akan menghasilkan banyak hasil ... .sehingga itu sepele untuk memverifikasi.
Erik Aronesty
89

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 .

  1. YAML menggunakan lekukan ruang, yang merupakan wilayah yang akrab bagi pengembang Python.
  2. Pengembang JavaScript menyukai JSON karena ini adalah bagian dari JavaScript dan dapat secara langsung ditafsirkan dan ditulis di dalam JavaScript, bersama dengan menggunakan cara singkat untuk mendeklarasikan JSON, tidak memerlukan tanda kutip ganda dalam kunci ketika menggunakan nama variabel khas tanpa spasi.
  3. Ada banyak parser yang bekerja sangat baik di semua bahasa untuk YAML dan JSON.
  4. Format ruang YAML bisa lebih mudah dilihat dalam banyak kasus karena pemformatan membutuhkan pendekatan yang lebih dapat dibaca manusia.
  5. Bentuk YAML yang lebih ringkas dan lebih mudah dilihat bisa menyulitkan untuk diedit dengan tangan jika Anda tidak memiliki ruang pemformatan yang terlihat di editor Anda. Tab bukan spasi sehingga semakin membingungkan jika Anda tidak memiliki editor untuk menerjemahkan penekanan tombol ke spasi.
  6. JSON jauh lebih cepat untuk membuat serial dan deserialize karena fitur yang secara signifikan lebih sedikit daripada YAML untuk diperiksa, yang memungkinkan kode yang lebih kecil dan lebih ringan untuk memproses JSON.
  7. Kesalahpahaman yang umum adalah bahwa YAML membutuhkan lebih sedikit tanda baca dan lebih kompak daripada JSON tetapi ini sepenuhnya salah. Whitespace tidak terlihat sehingga sepertinya ada lebih sedikit karakter, tetapi jika Anda menghitung spasi sebenarnya yang diperlukan untuk berada di sana agar YAML diinterpretasikan dengan benar bersama dengan lekukan yang tepat, Anda akan menemukan YAML sebenarnya membutuhkan lebih banyak karakter daripada JSON. JSON tidak menggunakan spasi putih untuk mewakili hierarki atau pengelompokan dan dapat dengan mudah diratakan dengan spasi kosong yang tidak perlu dihapus untuk transportasi yang lebih kompak.

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.

Jason Sebring
sumber
10
Saya tidak setuju bahwa pengembang python lebih suka YAML. Pythons dict pada dasarnya adalah JSON, daftar dicts pada dasarnya juga JSON. Python telah membangun json lib. Sebagai catatan saya adalah pengembang python dan saya lebih suka JSON (sebagian besar pengembang python saya tahu lebih suka JSON).
karantan
6
Satu hal yang benar-benar mengganggu saya tentang white-space adalah betapa mudahnya untuk dibingungkan dan membuatnya salah karena menjengkelkan atau tidak bisa berarti bersarang atau pada tingkat yang sama dan juga sangat mudah untuk kesalahan itu jika Anda tidak memiliki aturan panduan. itu seperti oops tersembunyi ini benar-benar bukan tipe skenario yang mudah tidak ada yang mengatakan saat mengedit yaml. tidak pernah memiliki masalah dengan json.
Jason Sebring
6
@JasonSebring. Anda hampir bertanya-tanya mengapa YAML memiliki banyak ruang 'Berendam di lautan' pertama saya di YAML menyebabkan aplikasi rusak ... semua karena ruang. Anda akan berpikir bahwa mungkin menggunakan lekukan yang tidak menggunakan karakter non-cetak akan jauh lebih masuk akal! (Yaitu, mengapa mereka tidak memilih '.' Daripada ''?) Untuk memahami YAML Anda harus pergi ke spesifikasi. Untuk memahami JSON tidak perlu itu. (Saya pernah ke yang pertama, dan tidak pernah yang terakhir). Ini bagi saya menunjukkan format yang tidak benar-benar 'dapat dibaca manusia'
cmroanirgo
7
@cmroanirgo yah ini pengalaman saya. Bos saya memaksa kami untuk menggunakan YAML lebih dari JSON dan itu membuat hal-hal yang tidak perlu jelek untuk diedit dan dicerna. Saya menulis ini karena harapan suara akan membenarkan saya.
Jason Sebring
3
Masalah dengan tab di YAML berarti (a) tidak membaca pesan kesalahan, dan (b) memiliki editor yang tidak menyorot tab. Kedua masalah mudah diperbaiki, jadi saya tidak mengerti keluhannya.
toolforger
38

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:

  • Sangat mudah untuk menghafal seluruh sintaks JSON, dan karenanya sangat yakin tentang memahami arti dari setiap file JSON. YAML tidak benar-benar dimengerti oleh manusia mana pun. Jumlah kehalusan dan tepi kasus sangat ekstrim.
  • Karena beberapa parser mengimplementasikan keseluruhan spek, bahkan lebih sulit untuk memastikan tentang makna dari ekspresi yang diberikan dalam konteks tertentu.
  • Kurangnya komentar di JSON dalam praktiknya benar-benar menyakitkan.

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.

Steve Bennett
sumber
3
Saya benar-benar berpikir YAML lebih kecil karena karakter yang tidak terlihat yang membodohi saya. Tak terlihat => Tidak ada, yah sebenarnya tidak. Jika Anda menghitung karakter tak terlihat harus ada di sana, terutama karena YAML mendapatkan sarang yang lebih besar, ia dengan cepat melampaui JSON. Saya hanya berpikir itu sangat menarik karena bagian yang dapat dibaca manusia menipu sebagian besar dari kita dalam gagasan itu sampai saya benar-benar memikirkannya karena Anda dapat meratakan JSON dan YAML, tidak terlalu banyak. Saya juga menemukan YAML sangat sulit untuk mengedit tangan, tidak membaca, hanya mengedit karena Anda perlu panduan editor dihidupkan, kadang-kadang salah mengira item bersarang.
Jason Sebring
1
Saya merasa bahwa tidak ada jawaban di sini yang menyatakan ini secara eksplisit: "Untuk file pengaturan / konfigurasi, YAML lebih baik (untuk alasan yang disebutkan di atas oleh semua orang). Untuk interop mesin / mesin gunakan JSON". Dengan kata lain: jika audiens target Anda adalah manusia, YAML lebih baik. Jika targetnya adalah program lain (tetapi Anda masih ingin agar data dapat dibaca manusia), gunakan JSON.
Florin T.
Itu benar, tetapi pertanyaannya meletakkan beberapa parameter yang cukup spesifik tentang bagaimana mereka ingin keduanya dibandingkan. Secara pribadi, saya tidak akan pernah menggunakan YAML untuk apa pun. Saya akan menggunakan JSON untuk interoperabilitas, atau JSON6 jika pemeliharaan manusia itu penting.
Steve Bennett
29

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.

JohnAD
sumber
22

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?

jldupont
sumber
22
Saya bertanya-tanya apa yang Anda maksud dengan gangguan tab . Saya percaya masalahnya adalah karakter tab tidak diperbolehkan dalam yaml , yang secara pribadi menurut saya adalah ide yang bagus di file sumber apa pun .
poolie
6
@poolie: jldupont kemungkinan merujuk pada spasi putih terkemuka yang signifikan secara sintaksis di YAML.
naught101
10
OK tapi itu bukan tab.
poolie
20

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
3
dengan cara apa YAML lebih kompleks?
Accatyyc
18
Misalnya, YAML mendukung jangkar, seperti yang telah dicatat dalam jawaban lain. Ada fitur lain, seperti tipe data yang dapat diperluas. Ini membuatnya lebih rumit untuk diuraikan, dan menjelaskan mengapa YAML memiliki spesifikasi yang lebih besar. Ini dapat merusak kinerja tergantung pada implementasi parser (lihat pertanyaan ini: stackoverflow.com/questions/2451732/… ).
Anton Strogonoff
5
Kompleksitas lebih baik daripada kesederhanaan jika kompleksitas itu membeli Anda kekuatan untuk mencapai kesederhanaan yang lebih besar secara keseluruhan. Itu tentu benar tergantung pada kompleksitas model data Anda.
Jonathan Neufeld
3
Saya mungkin sedikit terlambat di sini tetapi YAML dapat menambahkan komentar sedangkan JSON tidak bisa. Bagi saya itu sangat membantu ketika datang ke dokumentasi spesifikasi
Moses Liao GZ
@Accatyyc. Saya pikir kenyataan bahwa orang-orang di sini mengajukan pertanyaan tentang perbedaan adalah pertanda pasti bahwa YAML tidak semudah itu. Saya tidak pernah mengajukan pertanyaan tentang JSON (kecuali "mengapa saya tidak dapat memiliki komentar di dalamnya?")
cmroanirgo
15

Secara teknis YAML menawarkan lebih banyak daripada JSON (YAML v1.2 adalah superset dari JSON):

  • komentar
  • jangkar dan warisan - contoh 3 item identik:

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

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?

  • Fitur ekstra YAML dan notasi ringkas menjadikannya pilihan yang baik untuk file konfigurasi (file yang disediakan bukan pengguna).
  • Fitur terbatas JSON , dukungan luas, dan penguraian yang lebih cepat menjadikannya pilihan yang bagus untuk interoperabilitas dan data yang disediakan pengguna .
Wernight
sumber
4

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).

Mvr39
sumber
Saya tidak menggunakan JSON, saya menggunakan setara persis dengan JSON tanpa menyebutnya JSON. Saya menyebutnya PS-OFF. Anda akan menuntut saya untuk menggunakan { "": #, [] }???
Andrew
4

Terkadang Anda tidak perlu memutuskan untuk memilih yang satu dengan yang lain.

Di Go, misalnya, Anda dapat memiliki keduanya sekaligus:

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}
Michael Dorner
sumber
3

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.

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

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 .

HS Progr
sumber
0

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.

Triforcey
sumber
-1
  • 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.

  • JSON hanya dapat dibaca sedangkan YAML dapat dibaca serta dapat diedit.
  • JSON adalah subset dari YAML sehingga parser YAML dapat mengurai JSON.
  • YAML tidak menggunakan pembatas tambahan, sehingga lebih ringan dari XML dan JSON.
Premraj
sumber
Apa yang Anda maksud pada poin "data besar" dan "hanya dapat dibaca"? JSON adalah format data, apa konsep abstrak yang memiliki dua batasan ini?
João Farias
4
@ JoãoFarias Katakanlah Anda memiliki file JSON 1GB dan file CSV 1GB dan Anda memiliki memori 256MB. Anda dapat memproses file CSV baris demi baris, dengan JSON itu tidak mudah. Mungkin masih lebih mudah untuk mem-parsing file YAML baris demi baris, daripada mem-parsing JSON.
NeverEndingQueue