Perbedaan Antara YAML dan JSON

1. Ikhtisar

Dalam artikel singkat ini, kita akan melihat perbedaan antara YAML dan JSON melalui contoh cepat dan praktis.

2. Format

Untuk mendapatkan gambar yang lebih baik, mari kita mulai dengan melihat representasi JSON dan YAML dari POJO sederhana:

class Person { String name; Integer age; List hobbies; Person manager; }

Pertama, mari kita lihat representasi JSON-nya:

{ "name":"John Smith", "age":26, "hobbies":[ "sports", "cooking" ], "manager":{ "name":"Jon Doe", "age":45, "hobbies":[ "fishing" ], "manager":null } }

Sintaks JSON agak rumit karena menggunakan sintaks khusus seperti kurung kurawal {} dan tanda kurung siku [] untuk mewakili objek dan larik.

Selanjutnya, mari kita lihat bagaimana struktur yang sama akan terlihat di YAML:

name: John Smith age: 26 hobbies: - sports - cooking manager: name: Jon Doe age: 45 hobbies: - fishing manager:

Sintaks YAML terlihat sedikit lebih ramah karena menggunakan spasi kosong untuk menunjukkan hubungan antar objek dan ' - ' untuk merepresentasikan elemen array.

Kita dapat melihat bahwa meskipun keduanya mudah dibaca, YAML cenderung lebih mudah dibaca manusia.

Poin bonus lain untuk YAML adalah jumlah baris yang diperlukan untuk merepresentasikan informasi yang sama - YAML hanya membutuhkan 11 baris, sedangkan JSON membutuhkan 16 baris.

3. Ukuran

Kita telah melihat di bagian sebelumnya bahwa YAML direpresentasikan dalam baris yang lebih sedikit daripada JSON, tetapi apakah itu berarti dibutuhkan lebih sedikit ruang?

Mari kita bayangkan struktur yang sangat berlapis dengan induk dan lima anak yang direpresentasikan sebagai JSON:

{ "child":{ "child":{ "child":{ "child":{ "child":{ "child":{ "child":null } } } } } } }

Struktur yang sama akan terlihat serupa di YAML:

child: child: child: child: child: child: child:

Pada pandangan pertama, ini mungkin terlihat seperti JSON membutuhkan lebih banyak ruang, namun, pada kenyataannya, spesifikasi JSON tidak peduli dengan spasi atau baris baru, dan dapat dipersingkat sebagai berikut:

{"child":{"child":{"child":{"child":{"child":{"child":{"child":null}}}}}}}

Kita dapat melihat bahwa bentuk kedua jauh lebih pendek, dan hanya menempati 74 byte, sedangkan format YAML mengambil 97 byte.

4. Fitur YAML

Selain fitur-fitur dasar yang disediakan JSON, YAML hadir dengan fungsionalitas tambahan seperti yang akan kita lihat selanjutnya.

4.1. Komentar

YAML memungkinkan komentar dengan menggunakan # , fitur yang sering diinginkan saat bekerja dengan file JSON:

# This is a simple comment name: John

4.2. String Multi-Baris

Fitur lain yang hilang di JSON tetapi ada di YAML adalah string multi-baris:

website: | line1 line2 line3

4.3. Alias ​​dan Jangkar

Kita dapat dengan mudah menetapkan alias ke item tertentu menggunakan & dan menjangkar (referensi) menggunakan * :

httpPort: 80 httpsPort: &httpsPort 443 defaultPort: *httpsPort

5. Kinerja

Karena spesifikasi JSON yang sederhana, performanya dalam penguraian / pembuatan serial data jauh lebih baik daripada YAML.

Kami akan menerapkan tolok ukur sederhana untuk membandingkan kecepatan parsing YAML dan JSON menggunakan JMH.

Untuk benchmark YAML, kami akan menggunakan library snake-yaml yang terkenal , dan untuk benchmark JSON kami, kami akan menggunakan org-json :

@BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.SECONDS) @Measurement(batchSize = 10_000, iterations = 5) @Warmup(batchSize = 10_000, iterations = 5) @State(Scope.Thread) class Bench { static void main(String[] args) { org.openjdk.jmh.Main.main(args); } @State(Scope.Thread) static class YamlState { public Yaml yaml = new Yaml(); } @Benchmark Object benchmarkYaml(YamlState yamlState) { return yamlState.yaml.load("foo: bar"); } @Benchmark Object benchmarkJson(Blackhole blackhole) { return new JSONObject("{\"foo\": \"bar\"}"); } }

Seperti yang mungkin kita duga, JSON adalah pemenangnya, kira-kira 30 kali lebih cepat:

Benchmark Mode Cnt Score Error Units Main2.benchmarkJson thrpt 50 644.085 ± 9.962 ops/s Main2.benchmarkYaml thrpt 50 20.351 ± 0.312 ops/s

6. Ketersediaan Perpustakaan

JavaScript adalah standar untuk web, artinya hampir tidak mungkin menemukan bahasa yang tidak mendukung JSON sepenuhnya.

Di sisi lain, YAML didukung secara luas, tetapi ini bukan standar. Ini berarti bahwa library ada untuk sebagian besar bahasa pemrograman populer, tetapi karena kerumitannya, library tersebut mungkin tidak sepenuhnya mengimplementasikan spesifikasinya.

7. Apa yang Harus Saya Pilih?

Ini mungkin pertanyaan yang sulit untuk dijawab dan subjektif dalam banyak kasus.

Jika kita perlu mengekspos satu set REST API ke aplikasi front-end atau back-end lainnya, kita mungkin harus menggunakan JSON karena ini adalah standar industri de facto.

Jika kita perlu membuat file konfigurasi yang akan sering dibaca / diupdate oleh manusia, YAML mungkin merupakan pilihan yang baik.

Tentu saja, mungkin juga ada kasus penggunaan di mana YAML dan JSON cocok, dan itu hanya masalah selera.

8. Kesimpulan

Dalam artikel singkat ini, kita telah mempelajari perbedaan utama antara YAML dan JSON dan aspek apa yang perlu dipertimbangkan untuk membuat keputusan yang tepat tentang mana yang harus kita pilih.