Perbandingan JSON dan XML [ditutup]

273

Saya ingin tahu mana yang lebih cepat: XML dan JSON? Kapan harus menggunakan yang mana?

Durga Dutt
sumber
60
Lebih cepat dimana? Penularan? Pengolahan? Menghasilkan? Keduanya tidak memiliki kaki lho. Kemungkinan JSON "lebih cepat" dalam beberapa hal karena memiliki markup lebih sedikit. Di sisi lain, XML menyediakan XMLSchema untuk memastikan jenis, struktur ... jadi validitas. Ada XSLT untuk mengubah XML di hampir semua format output lainnya ... Itu tergantung pada apa yang Anda butuhkan .
Felix Kling
2
Juga periksa pertanyaan lain yang sebelumnya diajukan: stackoverflow.com/search?q=json+vs+xml
Felix Kling
16
BLARG! Ini adalah sesuatu yang saya benar-benar ingin tahu, dan sangat senang ada di sini, dan jawabannya SEMPURNA. BUR ON YOU , se moderator: mungkin ini saatnya memperpanjang rentetan pertunangan Anda. Bagus untukmu karena membiarkannya dijawab, setidaknya!
Mark Gerolimatos
Saya tidak peduli jika posting ini sangat terlambat untuk permainan, tapi saya setuju. Jika sebuah pertanyaan adalah penipuan, tidak relevan atau bertentangan dengan ketentuan layanan, mungkin (utas tertutup / tidak berguna) tidak boleh menjadi hal pertama yang muncul dalam pencarian. (btw, ini adalah hasil [duped] ke-2 yang muncul) Saya setuju bahwa mungkin jawaban harus ramping dan ringkas tetapi jika hasil setelah hasil adalah utas tertutup, tidak terjawab yang diisi dengan komentar di luar topik (yang bertentangan dengan ketentuan penggunaan) maka itu tidak membantu siapa pun.
Izaac Corbett
2
Meskipun pertanyaan yang diajukan tidak jelas, ini BUKAN pertanyaan berdasarkan pendapat.
qwr

Jawaban:

221

Sebelum menjawab kapan harus menggunakan yang mana, sedikit latar belakang:

sunting: Saya harus menyebutkan bahwa perbandingan ini benar-benar dari sudut pandang menggunakannya di browser dengan JavaScript. Ini bukan cara format yang baik data memiliki yang akan digunakan, dan ada banyak parser yang baik yang akan mengubah rincian untuk membuat apa yang saya katakan tidak cukup valid.

JSON lebih kompak dan (dalam pandangan saya) lebih mudah dibaca - dalam transmisi bisa "lebih cepat" hanya karena lebih sedikit data yang ditransfer.

Dalam parsing, itu tergantung pada parser Anda. Seorang parser yang mengubah kode (baik itu JSON atau XML) menjadi struktur data (seperti peta) dapat mengambil manfaat dari sifat ketat XML ( Skema XML memisahkan struktur data dengan baik) - namun di JSON jenis item (String / Number / Nested JSON Object) dapat disimpulkan secara sintaksis, misalnya:

myJSON = {"age" : 12,
          "name" : "Danielle"}

Pengurai tidak perlu cukup pintar untuk menyadari yang 12mewakili angka, (dan Daniellemerupakan string seperti yang lainnya). Jadi dalam javascript kita bisa melakukan:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

Dalam XML kita harus melakukan sesuatu seperti berikut:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(sebagai tambahan, ini menggambarkan titik bahwa XML agak lebih bertele-tele; perhatian untuk transmisi data). Untuk menggunakan data ini, kami menjalankannya melalui parser, maka kami harus memanggil sesuatu seperti:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

Sebenarnya, parser yang baik mungkin mengetikkan ageuntuk Anda (di sisi lain, Anda mungkin tidak menginginkannya). Apa yang terjadi ketika kita mengakses data ini - alih-alih melakukan pencarian atribut seperti pada contoh JSON di atas - kita sedang melakukan pencarian peta pada kunci name. Mungkin lebih intuitif untuk membentuk XML seperti ini:

<person name="Danielle" age="12" />

Tetapi kami masih harus melakukan pencarian peta untuk mengakses data kami:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

EDIT: Asli:

Di sebagian besar bahasa pemrograman (tidak semua, dengan rentang apa pun) pencarian peta seperti ini akan lebih mahal daripada pencarian atribut (seperti yang kami dapatkan di atas ketika kami mem-parsing JSON).

Ini menyesatkan: ingat bahwa dalam JavaScript (dan bahasa dinamis lainnya) tidak ada perbedaan antara pencarian peta dan pencarian bidang. Bahkan, lookup lapangan adalah hanya lookup peta.

Jika Anda ingin perbandingan yang benar-benar berharga, yang terbaik adalah membandingkannya - lakukan tolok ukur dalam konteks di mana Anda berencana untuk menggunakan data.

Saat saya mengetik, Felix Kling telah memberikan jawaban yang cukup ringkas membandingkan mereka dalam hal kapan harus menggunakan masing-masing, jadi saya tidak akan melangkah lebih jauh.

jelford
sumber
Hanya catatan yang luar biasa ... Pencarian bidang JavaScript tidak harus berupa pencarian peta. Itu tergantung pada objek dan bidang yang dimaksud. Benda kecil (terutama yang tidak memiliki properti terpasang setelah konstruksi) sering menggunakan "tipe cepat" yang dioptimalkan dengan cache inline di mesin JS modern, dan jatuh kembali ke tas properti yang lebih lambat (pencarian peta) untuk objek dengan sejumlah besar properti atau kasus di mana struktur objek sering berubah.
Brandon Paddock
2
Saya menemukan bahwa JSON lebih mudah bagi manusia untuk diurai tetapi XML lebih mudah bagi komputer untuk mengurai.
Jus12
5
Tidak benar, misalnya, dalam PHP, JSON menggunakan json.so tanpa dependensi pada 78k, XML di sisi lain, membutuhkan xml.so atau xmlreader.so di 54k / 32k, tetapi juga memerlukan libxml2.so yang 1.4megs . Lebih banyak kode membuat proses lebih lama dan menggunakan lebih banyak memori. Belum lagi, XML, karena node / struktur pohonnya, memiliki referensi melingkar, yang dapat menyebalkan dalam bahasa apa pun yang tidak memiliki referensi lemah. Saya telah menemukan dalam beberapa bahasa bahwa parser XML JAUH lebih besar (membutuhkan lebih banyak memori dan menggunakan lebih banyak memori) daripada parser JSON lawannya.
Rahly
Mengapa Anda mencampur masalah status ketat JS dengan perbandingan yang tidak terkait ini? Mengacu tanda sama dengan dua atau tiga.
atilkan
1
@atilkan karena banyak parser mengartikan string numerik sebagai angka, atau menyimpan angka sebagai string numerik.
mazunki
244

Lebih cepat bukanlah atribut JSON atau XML atau hasil yang perbandingannya akan menghasilkan. Jika ada, maka itu adalah atribut parser atau bandwidth yang digunakan untuk mengirimkan data.

Inilah (awal) daftar kelebihan dan kekurangan JSON dan XML:


JSON

Pro:

  • Sintaks sederhana, yang menghasilkan overhead "markup" yang lebih sedikit dibandingkan dengan XML.
  • Mudah digunakan dengan JavaScript karena markup adalah subset notasi literal objek JS dan memiliki tipe data dasar yang sama dengan JavaScript.
  • Skema JSON untuk deskripsi dan tipe data dan validasi struktur
  • JsonPath untuk mengekstraksi informasi dalam struktur bersarang dalam

Menipu:

  • Sintaksis sederhana, hanya segelintir tipe data berbeda yang didukung.

  • Tidak ada dukungan untuk komentar.


XML

Pro:

  • Markup umum; dimungkinkan untuk membuat "dialek" untuk tujuan apa pun
  • Skema XML untuk tipe data, validasi struktur. Memungkinkan juga untuk membuat tipe data baru
  • XSLT untuk transformasi ke berbagai format output
  • XPath / XQuery untuk mengekstraksi informasi dalam struktur bersarang dalam
  • dukungan bawaan untuk ruang nama

Menipu:

  • Relatif bertele-tele dibandingkan dengan JSON (menghasilkan lebih banyak data untuk jumlah informasi yang sama).

Jadi pada akhirnya Anda harus memutuskan apa yang Anda butuhkan . Jelas kedua format memiliki kasus penggunaan yang sah. Jika Anda sebagian besar akan menggunakan JavaScript maka Anda harus menggunakan JSON.

Silahkan menambahkan pro dan kontra. Saya bukan ahli XML;)

Felix Kling
sumber
20
Con lain untuk JSON dan Pro untuk XML: JSON tidak mendukung referensi objek (siklik atau tidak), XML tidak. XML melakukan ini dengan memaksa idatribut menjadi unik di dalam dokumen.
Mesin Bumi
7
@EarthEngine Actually Json.Net ( json.codeplex.com ) mendukung referensi objek: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov
22
@DmitryLobanov: Mereka hanya menambahkan beberapa batasan tambahan untuk standar JSON, tetapi tidak dikenali oleh alat JSON lainnya. Jadi ini bukan "asli" untuk JSON. Namun untuk XML, pembatasan ditulis dalam standar sehingga asli.
Mesin Bumi
1
Bagaimana dengan Skema JSON? en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe
5
JSON memiliki array inbuilt, serta nilai "null". Sedangkan dalam XML Anda memerlukan semacam konvensi di parser skema Anda. Ada juga proyek konversi mirip-XSLT untuk JSON (mis. Github.com/emlynoregan/bOTLjs )
Vasyl Boroviak
22

Kecepatan pemrosesan mungkin bukan satu-satunya masalah yang relevan, namun, karena itulah pertanyaannya, berikut adalah beberapa angka dalam tolok ukur: JSON vs XML: Beberapa angka sulit tentang verbositas . Untuk kecepatan, dalam patokan sederhana ini, XML menghadirkan 21% overhead di atas JSON.

Catatan penting tentang verbositas, seperti yang dikatakan artikel tersebut, keluhan paling umum: ini tidak begitu relevan dalam praktiknya (baik data XML atau JSON biasanya ditangani oleh manusia, tetapi oleh mesin), bahkan jika untuk masalah kecepatan, itu memerlukan beberapa waktu lebih masuk akal untuk kompres.

Juga, dalam patokan ini, sejumlah besar data diproses, dan aplikasi web tipikal tidak akan mengirimkan potongan data dengan ukuran seperti itu, sebesar 90MB, dan kompresi mungkin tidak menguntungkan (untuk potongan data yang cukup kecil, potongan terkompresi akan lebih besar dari potongan yang tidak terkompresi), jadi tidak berlaku.

Namun, jika tidak ada kompresi yang terlibat, JSON, seperti yang jelas terser, akan lebih sedikit lebih berat di saluran transmisi, terutama jika ditransmisikan melalui koneksi WebSocket, di mana tidak adanya overhead HTTP klasik dapat membuat perbedaan pada keuntungan JSON, bahkan lebih penting.

Setelah transmisi, data akan dikonsumsi, dan ini dihitung dalam waktu pemrosesan keseluruhan. Jika data yang cukup besar atau kompleks untuk ditransmisikan, kurangnya skema yang secara otomatis diperiksa oleh pengurai XML yang valid, mungkin memerlukan pemeriksaan lebih lanjut pada data JSON; pemeriksaan ini harus dieksekusi dalam JavaScript, yang tidak diketahui cepat, dan karenanya dapat menghadirkan overhead tambahan atas XML dalam kasus-kasus seperti itu.

Bagaimanapun, hanya pengujian yang akan memberikan jawaban untuk kasus penggunaan khusus Anda (jika kecepatan adalah satu-satunya masalah, dan bukan standar atau keamanan atau integritas ...).

Pembaruan 1: layak untuk disebutkan, adalah EXI, format XML biner, yang menawarkan kompresi dengan biaya lebih murah daripada menggunakan Gzip, dan menghemat pemrosesan yang diperlukan untuk mendekompresi XML terkompresi. EXI adalah untuk XML, apa itu BSON untuk JSON. Punya tinjauan singkat di sini, dengan beberapa referensi efisiensi di ruang dan waktu: EXI: Standar biner terakhir? .

Pembaruan 2: terdapat juga laporan kinerja XML biner, yang dilakukan oleh W3C, karena efisiensi dan memori yang rendah dan jejak CPU, juga merupakan masalah untuk area XML juga: Evaluasi Interchange XML yang Efisien .

Perbarui 2015-03-01

Layak untuk diperhatikan dalam konteks ini, karena overhead HTTP dimunculkan sebagai masalah: IANA telah mendaftarkan pengkodean EXI (XML biner efisien yang disebutkan di atas), sebagai Coding Konten untuk protokol HTTP (bersama dengan kompres , deflate , dan gzip ) . Ini berarti EXI adalah opsi yang diharapkan dapat dipahami oleh browser di antara klien HTTP lain yang mungkin. Lihat Parameter Protokol Transfer Hiperteks (iana.org) .

Hibou57
sumber
"Untuk kecepatan, dalam patokan sederhana ini, XML menyajikan 21% overhead di atas JSON" - ada perbedaan besar dalam penguraian JSON tergantung pada pengurai spesifik yang digunakan. Hampir tidak ada artinya mengutip parser tertentu. Sama untuk XML.
Jeffrey Blattman
17

Saya menemukan artikel ini di pasar digital sangat menarik. Mengutip kutipan mereka dari Norm:

Tentang pro JSON:

Jika semua yang Anda ingin sampaikan adalah nilai atom atau daftar atau hash nilai atom, JSON memiliki banyak keunggulan XML: itu dapat digunakan langsung melalui Internet, mendukung berbagai aplikasi, mudah untuk menulis program untuk memproses JSON, ia memiliki beberapa fitur opsional, mudah dibaca oleh manusia dan cukup jelas, desainnya formal dan ringkas, dokumen JSON mudah dibuat, dan menggunakan Unicode. ...

Tentang pro XML:

Penawaran XML sangat baik dengan kekayaan penuh data tidak terstruktur. Saya tidak khawatir tentang masa depan XML sama sekali bahkan jika kematiannya dirayakan dengan gembira oleh kader desainer web API.

Dan aku tidak bisa menahan diri untuk tidak mengatakan, "Sudah kubilang!" token di meja saya. Saya berharap dapat melihat apa yang dilakukan orang-orang JSON ketika mereka diminta untuk mengembangkan API yang lebih kaya. Ketika mereka ingin bertukar data yang kurang terstruktur, apakah mereka akan memilihnya ke JSON? Saya melihat sesekali menyebutkan bahasa skema untuk JSON, akankah bahasa lain mengikuti? ...

Saya pribadi setuju dengan Norm. Saya pikir sebagian besar serangan ke XML berasal dari Pengembang Web untuk aplikasi tipikal, dan bukan dari pengembang integrasi. Tapi itu menurut saya! ;)

Christian Vielma
sumber
Bagus! Jika 80% pengembang aktif adalah javascript kiddies, 80% akan menyuarakan pendapat mereka bahwa JSON "lebih baik". Tetapi siapa pun yang menggunakan bahasa yang diketik hanya sedikit geli tentang JSON. { "foo": 42 }Jenis apa objek itu? Kemudian, untuk memperbaiki kekurangan dari jenis, hal-hal seperti ini menunjukkan up: { "__type": "Bar", "foo": 42 }. Dalam XML dalam jenis kontras dapat connotated untuk nama elemen: <Bar><foo>42</foo></Bar>. Hanya orang-orang yang suka dan javascript seperti json;)
BitTickler
15

XML (Extensible Markup Language) sering digunakan XHR karena ini adalah bahasa penyiaran standar, apa yang dapat digunakan oleh bahasa pemrograman apa pun, dan didukung oleh sisi server dan klien, jadi ini adalah solusi yang paling fleksibel. XML dapat dipisahkan untuk lebih banyak bagian sehingga grup tertentu dapat mengembangkan bagian dari program, tanpa mempengaruhi bagian lainnya. Format XML juga dapat ditentukan oleh XML DTD atau XML Schema (XSL) dan dapat diuji.

JSON adalah format pertukaran data yang semakin populer sebagai format aplikasi JavaScript. Pada dasarnya ini adalah array notasi objek. JSON memiliki sintaks yang sangat sederhana sehingga dapat dipelajari dengan mudah. Dan juga dukungan JavaScript parsing JSON dengan evalfungsi. Di sisi lain, evalfungsi tersebut mendapat negatif. Sebagai contoh, program JSON dapat menjadi sangat lambat dan karena keamanannya evalbisa sangat berisiko. Ini tidak berarti bahwa JSON tidak baik, hanya saja kita harus lebih berhati-hati.

Saran saya adalah Anda harus menggunakan JSON untuk aplikasi dengan pertukaran data ringan, seperti game. Karena Anda tidak harus benar-benar peduli dengan pemrosesan data, ini sangat sederhana dan cepat.

XML adalah yang terbaik untuk situs web yang lebih besar, misalnya situs belanja atau sesuatu seperti ini. XML bisa lebih aman dan jelas. Anda dapat membuat data-struct dan skema dasar untuk dengan mudah menguji koreksi dan memisahkannya menjadi beberapa bagian dengan mudah.

Saya sarankan Anda menggunakan XML karena kecepatan dan keamanan, tetapi JSON untuk hal-hal ringan.

Gergely Fehérvári
sumber
Saya tidak downvoting tapi saya ingin tahu bagaimana Anda melihat JSON sebagai muatan yang lebih berat atau lebih lambat secara umum. GZip / Deflate dapat diterapkan. Sintaksnya secara inheren membuatnya lebih kecil dalam hal byte. JSON juga dapat mendefinisikan skema itu sebagai kontrak dan mudah diserialisasi.
Anthony Mason
JSON tidak perlu dievaluasi untuk diuraikan.
Yay295
7

Hal penting tentang JSON adalah menjaga agar data transfer tetap terenkripsi untuk alasan keamanan. Tidak diragukan bahwa JSON jauh lebih cepat daripada XML. Saya telah melihat XML mengambil 100 ms dimana JSON hanya mengambil 60 ms. Data JSON mudah dimanipulasi.

Ayah baptis
sumber
5
Saya setuju, JSON memenangkan pertarungan dalam transfer data tetapi tidak ada markup, validasi, dan ekstensi elemen. Itu sebabnya Google merangkak sitemap.xml bukan sitemap.json
Chetabahana
1
Peta Situs didefinisikan sebelum json populer sehingga itu bukan contoh terbaik. Sitemap juga dilihat sebagai server ke server di mana XML lebih populer daripada JSON. (JSON benar-benar hanya karena populer karena mudah dikerjakan dalam JavaScript.)
Matthew Whited
tetapi Google AMP menggunakan json dan bukan xml
Ashraf