Mengapa semua orang memilih JSON lebih dari XML untuk jQuery? [Tutup]

155

Saya pikir XML sangat portabel dan dapat digunakan sebagai basis data mini. Saya telah melihat XML digunakan di mana-mana. Saya bahkan melihat perusahaan besar beralih ke JSON . Bahkan Microsoft memiliki dukungan terintegrasi untuk JSON. Apa semua hype atas JSON?

Luke101
sumber
14
"semua orang" dan "di mana-mana" yang absolut seperti ...
Matthew Groves
73
@eliben XML sebenarnya tidak payah. Ini sangat kuat tetapi seperti berburu kelinci dengan peluncur roket, itu mungkin tidak selalu menjadi pilihan terbaik.
Dan
20
Sebagian besar dari apa yang saat ini digunakan orang untuk XML akan lebih baik di JSON
MGOwen
39
@Dan Jika saja XML sama menyenangkannya dengan berburu kelinci dengan peluncur roket (mungkin - saya tidak bisa mengatakan saya sudah mencobanya sendiri)
David Johnstone
4
karena 'Alternatif Bebas-Lemak untuk XML' -json.org
DMin

Jawaban:

226

Pada dasarnya karena JSON diakui secara asli oleh JavaScript, ini sangat ringan, minimalis dan sangat portabel karena hanya bergantung pada dua struktur mendasar:

  • Kumpulan pasangan nama / nilai. Dalam berbagai bahasa, ini diwujudkan sebagai objek, catatan, struct, kamus, tabel hash, daftar kunci, atau array asosiatif.
  • Daftar nilai yang diurutkan. Dalam sebagian besar bahasa, ini diwujudkan sebagai array, vektor, daftar, atau urutan.
CMS
sumber
3
+1 .. sungguh .. begitu banyak tipe data yang berbeda mendukung banyak hal dibandingkan dengan teks xml mentah
Xinus
48
+1, terutama karena parsing JSON secara luar biasa lebih efisien dibandingkan dengan parsing XML, bahkan sedikit demi sedikit. Setelah kumpulan data yang Anda pedulikan melebihi ambang tertentu (dan sangat kecil), perbedaan kinerja akan terlihat.
Magsol
1
Seseorang menunjukkan kepada saya data yang mengatakan parsing JSON lebih cepat dari XML di browser modern. Sebuah jawaban pada SO di sini mengatakan sebaliknya: stackoverflow.com/questions/4596465/…
HDave
136

XML tidak benar-benar mulai bersinar sampai Anda mulai mencampurkan berbagai skema ruang nama yang berbeda. Kemudian Anda melihat JSON mulai jatuh, tetapi jika Anda hanya memerlukan format serialisasi untuk data Anda, JSON lebih kecil, lebih ringan, lebih mudah dibaca manusia, dan umumnya lebih cepat dari XML.

jcdyer
sumber
31
+1 untuk menunjukkan apa yang sebenarnya berguna untuk XML. Terlalu sering orang menggunakan XML bahkan ketika mereka bisa bertahan dengan sesuatu yang lebih sederhana.
Daniel Pryden
1
Ya harus setuju dengan jcd dan Daniel di sini. Respons berkualitas mengapa XML masih cukup bagus untuk beberapa hal.
diketahui warga negara
3
Bagaimana XML kurang dapat dibaca, saya merasa hampir mustahil untuk membaca json di mana saya pikir hierarki XML jauh lebih mudah dipahami (tentu sedikit bertele-tele). Mungkin saya belum cukup bekerja dengan JSON
Colton
namespaces adalah solusi xml untuk memecahkan masalah tertentu ketika Anda melakukan sesuatu dengan XML. Jika Anda menggunakan json, temukan solusi json untuk memecahkan masalah yang sama dengan cara json. Bagi saya argumen namespaces sama seperti "Oh! Tapi json tidak memiliki atribut!"
redben
61

Saya menemukan bahwa manfaat besar JSON atas XML adalah bahwa saya tidak harus memutuskan cara memformat data. Seperti yang telah ditunjukkan beberapa orang, ada banyak cara untuk melakukan bahkan struktur data sederhana dalam XML - sebagai elemen, sebagai nilai atribut, dll. Kemudian Anda harus mendokumentasikannya, menulis Skema XML atau Relax NG atau omong kosong lainnya ... Ini berantakan.

XML mungkin memiliki kelebihannya, tetapi untuk pertukaran data dasar, JSON jauh lebih ringkas dan langsung. Sebagai pengembang Python, tidak ada ketidaksesuaian impedansi antara tipe data sederhana di JSON dan di Python. Jadi jika saya menulis server-side handler untuk permintaan AJAX yang menanyakan kondisi salju untuk resor Ski tertentu, saya akan membuat kamus seperti berikut:

conditions = {
    'new_snow_24': 5.0,
    'new_snow_48': 8.5,
    'base_depth': 88.0,
    'comments': 'Deep and steep!',
    'chains_required': True,
}
return simplejson.dumps(conditions)   # Encode and dump `conditions` as a JSON string

Ketika diterjemahkan melalui JSON (menggunakan pustaka seperti 'simplejson' untuk Python), struktur JSON yang dihasilkan terlihat hampir identik (kecuali dalam JSON, boolean dikurung lebih rendah).

Mendekode struktur itu hanya memerlukan pengurai JSON, apakah itu untuk Javascript atau Objective-C untuk aplikasi iPhone asli atau C # atau klien Python. Float akan diartikan sebagai float, string sebagai string, dan booleans sebagai booleans. Menggunakan perpustakaan 'simplejson' di Python, sebuah simplejson.loads(some_json_string)pernyataan akan memberi saya kembali struktur data lengkap seperti yang baru saja saya buat dalam contoh di atas.

Jika saya menulis XML, saya harus memutuskan apakah akan melakukan elemen atau atribut. Kedua hal berikut ini valid:

<conditions>
    <new-snow-24>5</new-snow-24>
    <new-snow-48>8.5</new-snow-48>
    <chains-required>yes</chains-required>
    <comments>deep and steep!</comments>
</conditions>

<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
   <comments>deep and steep!</comments>
</conditions>

Jadi saya tidak hanya harus memikirkan data yang mungkin ingin saya kirim ke klien, saya juga harus memikirkan cara memformatnya. XML, meskipun lebih sederhana daripada SGML biasa dengan lebih ketat dengan aturannya, masih menyediakan terlalu banyak cara untuk berpikir tentang data itu. Maka saya harus pergi tentang menghasilkannya. Saya tidak bisa hanya mengambil kamus Python (atau struktur data sederhana lainnya) dan mengatakan "pergi buat dirimu sendiri ke dalam XML saya". Saya tidak dapat menerima dokumen XML dan langsung mengatakan "buat dirimu menjadi objek dan struktur data" tanpa menulis parser khusus, atau tanpa memerlukan overhead tambahan Skema XML / Relax NG dan rasa sakit lainnya.

Singkatnya adalah bahwa itu jauh lebih mudah dan lebih langsung untuk menyandikan dan mendekode data ke JSON, terutama untuk pertukaran cepat. Ini mungkin berlaku lebih untuk orang-orang yang berasal dari latar belakang bahasa dinamis, karena tipe data dasar (daftar, kamus, dll.) Yang dibangun di JavaScript / JSON secara langsung memetakan ke tipe data yang sama atau serupa di Python, Perl, Ruby, dll.

pengguna210794
sumber
34

Kinerja JSON tidak jauh berbeda dari XML untuk sebagian besar kasus penggunaan, JSON tidak cocok dan dapat dibaca untuk struktur sarang yang dalam ... Anda akan mengalami]]]}], yang membuat proses debug sulit dilakukan

avatar
sumber
31

Ini ringan dibandingkan dengan XML. Jika Anda perlu skala, kurangi persyaratan bandwidth Anda!

Bandingkan JSON

 [
      {
           color: "red",
           value: "#f00"
      },
      {
           color: "green",
           value: "#0f0"
      },
      {
           color: "blue",
           value: "#00f"
      },
      {
           color: "cyan",
           value: "#0ff"
      },
      {
           color: "magenta",
           value: "#f0f"
      },
      {
           color: "yellow",
           value: "#ff0"
      },
      {
           color: "black",
           value: "#000"
      }
 ]

ke XML:

 <colors>
      <color >
           <name>red</name>
           <value>#f00</value>
      </color>
      <color >
           <name>green</name>
           <value>#0f0</value>
      </color>
      <color >
           <name>blue</name>
           <value>#00f</value>
      </color>
      <color >
           <name>cyan</name>
           <value>#0ff</value>
      </color>
      <color >
           <name>magenta</name>
           <value>#f0f</value>
      </color>
      <color >
           <name>yellow</name>
           <value>#ff0</value>
      </color>
      <color >
           <name>black</name>
           <value>#000</value>
      </color>
 </colors>
Ron Gejman
sumber
23
tidak hanya lebih kecil, tetapi lebih ramah manusia. XML terlihat seperti upaya buruk manusia untuk berbicara seperti komputer.
deft_code
15
XML Anda juga dapat mengurangi atribut XML bukan elemen untuk tipe sederhana (nama / nilai)
Matthew Whited
4
@ Matthew: Ya, tapi kemudian terlihat tidak konsisten dan jelek. Dan Anda masih perlu membuka / menutup tag untuk elemen tersebut. JSON (paling-paling) membagi dua jumlah tag yang perlu Anda gunakan.
Ron Gejman
2
Lihatlah contoh Marc. Saya tidak melihat bagaimana versi Anda lebih mudah dibaca daripada versinya. stackoverflow.com/questions/1743532/…
Matthew Whited
1
perbedaan panjang tidak tampak besar bagi saya
vtd-xml-author
28

Hanya sebuah anekdot dari pengalaman pribadi saya:

Saya menulis direktori Javascript kecil, pertama dengan data dalam XML, dan kemudian mengadaptasinya untuk menggunakan JSON sehingga saya bisa menjalankannya berdampingan dan membandingkan kecepatan dengan Firebug. JSON berakhir menjadi sekitar 3 kali lebih cepat (350-400 ms vs 1200-1300 ms untuk menampilkan semua data). Juga, seperti yang telah dicatat orang lain, JSON jauh lebih mudah di mata dan ukuran file adalah 25% lebih baik karena markup yang lebih ramping.

Nate B
sumber
2
Jika semua orang membuat tolok ukur ini, kami tidak akan berdebat.
HDave
20
 <colors>
      <color name='red'     value='#f00'/>
      <color name='green'   value='#0f0'/>
      <color name='blue'    value='#00f'/>
      <color name='cyan'    value='#0ff'/>
      <color name='magenta' value='#f0f'/>
      <color name='yellow'  value='#ff0'/>
      <color name='black'   value='#000'/>
 </colors>

Dengan atribut, XML itu bagus. Namun karena beberapa alasan, XML buatan sendiri umumnya 100% terbuat dari elemen, dan jelek.

Marc
sumber
2
Itu masih karakter non-spasi lebih dari contoh JSON. Dan atribut parsing bisa lebih mengganggu dalam XML.
jmucchiello
4
Mungkin karena tipe kompleks benar-benar hanya dapat dijelaskan dalam elemen sehingga cara sebagian besar alat default. Saya setuju bahwa XML ini sangat mudah digunakan dan dibaca.
Matthew Whited
18

Konsumsi yang mudah oleh JavaScript dapat menjadi salah satu alasannya ..

Xinus
sumber
6
Itulah alasan utama saya menggunakannya. Parsing xml secara manual sangat rumit. Juga, karena saya menggunakan Python untuk membuat JSON di tempat pertama, mereka menangani data dan objek dengan cara yang sangat mirip, yang berarti serialisasi bolak-balik membuat semuanya bahagia!
RandomInsano
10

JSON adalah yang terbaik untuk konsumsi data dalam aplikasi web dari layanan web untuk ukuran dan kemudahan penggunaannya, terutama karena dukungan bawaan dalam JavaScript . Bayangkan overhead perhitungan untuk parsing sebuah fragmen xml dibandingkan dengan pencarian instan di JSON.

Contoh yang sangat bagus adalah JSON-P. Anda dapat memperoleh kembali data dari layanan web yang dibungkus dengan panggilan fungsi panggilan balik, seperti my_callback({"color": "blue", "shape":"square"});di dalam <script>tag yang dibuat secara dinamis sehingga data dapat langsung dikonsumsi dalam fungsi tersebut my_callback(). Tidak ada cara untuk mendekati kenyamanan ini menggunakan XML.

XML akan menjadi format pilihan untuk dokumen besar, di mana Anda memiliki kerangka kerja merender halaman data dalam berbagai format menggunakan XSLT. XML juga dapat digunakan dengan file konfigurasi aplikasi agar mudah dibaca di antara banyak kegunaan lain.

Joy Dutta
sumber
8

Tidak ada seorang pun di sini yang menyebutkan keunggulan utama XML: aturan validasi (DTD, XSD). Kesimpulan saya, setelah menggunakan keduanya:

  • JSON sangat cocok untuk ajax, terutama jika Anda mengembangkan sendiri sisi server dan klien. Anda pada dasarnya membuat objek js tepat di skrip server Anda!
  • XML bersinar di lingkungan perusahaan, ketika Anda harus menetapkan standar pertukaran data antara organisasi birokrasi besar. Seringkali, satu pihak mengembangkan bagiannya beberapa bulan sebelum yang lain, sehingga benar-benar mendapat manfaat dari memvalidasi permintaannya terhadap XSD yang disepakati. Juga, di perusahaan besar, transfer data sering diterjemahkan antara sistem yang berbeda. Ini juga kekuatan XML, pikirkan XSLT. Contoh: konversi bebas kode ke JSON: p

Tentu saja, ada skema json yang sedang dikembangkan tetapi Anda tidak akan menemukan dukungan bawaan untuk itu di mana pun.

Saya seorang fanboy dari keduanya, mereka memiliki kekuatan yang berbeda.

AP
sumber
6

Sekarang ada JSON encoders dan decoder untuk sebagian besar bahasa, tidak ada alasan untuk TIDAK menggunakan JSON untuk penggunaan yang masuk akal (dan itu mungkin 90% dari use case untuk XML).

Saya bahkan pernah mendengar tentang string JSON yang digunakan dalam database SQL besar untuk membuat perubahan skema lebih mudah.

Nosredna
sumber
5

Sejujurnya, tidak ada yang jauh berbeda antara JSON dan XML dalam kenyataan bahwa mereka dapat mewakili semua jenis data. Namun, XML secara sintaksis lebih besar dari JSON dan itu membuatnya lebih berat dari JSON.

JasCav
sumber
1
tidak menemukan jawaban Anda sangat menginspirasi, tetapi itu tidak salah sehingga suara turun tampak tidak adil.
deft_code
+1 untuk menyatakan bahwa XML dapat digunakan dengan cara menjadi superset JSON yang tepat .
Sebastian
5

JSON tidak memiliki impedansi-ketidakcocokan dengan pemrograman JavaScript. JSON dapat berisi bilangan bulat, string, daftar, array. XML hanyalah elemen dan node yang perlu diuraikan menjadi bilangan bulat dan seterusnya sebelum dapat dikonsumsi.

Kristen
sumber
Kebutuhan untuk mengurai item tidak sama dengan ketidakcocokan impedansi.
Rob
9
Ketidakcocokan impedansi adalah ketika konsep tidak memetakan secara rapi dari satu format ke format lainnya, seperti halnya pemetaan objek-relasional. Beberapa hal sangat mudah untuk diekspresikan dengan objek tetapi sulit dengan SQL sementara hal lain mudah untuk diekspresikan menggunakan SQL, tetapi hierarki objek sulit mengungkapkannya dengan jelas. Dengan XML dan JSON, yang satu sering membutuhkan sedikit lebih banyak pekerjaan untuk sampai ke makna daripada yang lain, tapi itu benar-benar tergantung pada alat parsing. Ekspresivitasnya (kebanyakan) sama.
jcdyer
4

Keduanya bagus dan sangat portabel. Namun JSON telah mendapatkan popularitas karena serialisasi menjadi lebih sedikit karakter dalam banyak kasus (yang diterjemahkan ke dalam waktu pengiriman yang lebih cepat) dan karena cocok dengan sintaks objek JavaScript, ia dapat langsung diterjemahkan ke dalam objek dalam memori yang membuat Ajax jauh lebih mudah untuk melaksanakan.

XML masih bagus. JSON hanyalah "terbaru dan terhebat" dibandingkan dengan XML.

Adam
sumber
1
Dan saya percaya bahwa revisi JavaScript yang lebih baru mulai menyertakan encoders dan decoder JSON bawaan yang "aman" (bebas eval).
Nosredna
4

Mudah diuraikan oleh JavaScript dan ringan (dokumen di JSON lebih kecil dari dokumen XML yang berisi data yang sama.)

Hannoun Yassir
sumber
3

JSON adalah serialisasi JavaScript yang efektif yang dapat Anda eval (aJsonString) langsung ke objek JavaScript. Di dalam browser itu adalah JSON no-brainer yang sangat cocok untuk JavaScript. Pada saat yang sama, JavaScript adalah bahasa dinamis yang diketik dengan sangat longgar dan tidak dapat mengambil keuntungan dari semua informasi jenis spesifik yang tersedia yang terdapat dalam dokumen Xml / Xsd. Metadata ekstra ini (yang bagus untuk interoperabilitas) adalah penghalang dalam JavaScript sehingga membuatnya lebih membosankan dan lebih sulit untuk digunakan.

Ukuran vs Kinerja

Jika Anda menggunakan browser JSON lebih cepat untuk membuat serial / deserialize karena lebih sederhana, lebih ringkas, dan yang lebih penting didukung secara native. Saya memiliki beberapa tolok ukur database northwind yang tersedia membandingkan ukuran dan kecepatan antara berbagai serializers yang tersedia. Di Perpustakaan Kelas Dasar, serializer XML DataContract Microsoft lebih dari 30% lebih cepat daripada JSON mereka. Meskipun ini lebih berkaitan dengan upaya yang dilakukan Microsoft ke dalam serializer XML mereka karena saya dapat mengembangkan JsonSerializer yang lebih cepat 2,6x daripada XML. Adapun payload berdasarkan tolok ukur itu tampak seolah-olah XML kira-kira lebih dari 2xukuran JSON. Namun ini dapat dengan cepat meledak jika payload XML Anda menggunakan banyak ruang nama yang berbeda dalam dokumen yang sama.

mitos
sumber
2

XML adalah minyak ular kembung di sebagian besar situasi. JSON memberi Anda sebagian besar manfaat tanpa mengasapi.

hanya seseorang
sumber
1

Satu kelebihan utama selain yang disebutkan di sini. Untuk data yang sama, ada beberapa cara untuk merepresentasikannya sebagai file XML tetapi hanya satu cara dengan JSON, menghilangkan ambiguitas :)

Jaseem
sumber
2
{"colors":["red","green","blue"],"systems":["windows","mac"]}vs.{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
Jerome Baum
0

Sejauh ini saya bukan ahli, tetapi dari berbagai perusahaan tempat saya bekerja, kita biasanya menggunakan XML dalam lingkungan data kecil atau nilai konfigurasi (web.config adalah contoh yang bagus).

Ketika Anda memiliki sejumlah besar data, umumnya, Anda ingin melaporkan data itu. Dan XML bukan sumber yang bagus untuk pelaporan. Dalam skema besar, tampaknya seolah-olah basis data transaksional lebih mudah dilaporkan / dicari dibandingkan dengan XML.

Apakah ini masuk akal? Seperti yang saya katakan di atas, saya bukan ahli tetapi dari pengalaman saya ini tampaknya menjadi masalah. Juga, saya percaya Microsoft terintegrasi dukungan JSON karena gelombang pengembang pindah ke sisi klien atau tindakan tertulis untuk meningkatkan visual UI ( Ajax ) dan Microsoft Ajax belum digunakan sebanyak perpustakaan lain seperti jQuery dan MooTools ( YUI Yahoo juga ada dalam campuran itu) karena integrasi mereka yang indah dari objek serial menggunakan JSON.

Saya menemukan diri saya sedang menulis kode sekarang mengimplementasikan serializer JSON dalam kode VB saya. CARA itu terlalu mudah dan dari sudut pandang peningkatan / modifikasi, Anda tidak bisa mengalahkannya. Ini cara Microsoft untuk membuat kita kecanduan VS, kurasa. Saya baru-baru ini mengkonversi aplikasi perusahaan untuk menggunakan Ajax (via jQuery) dan menggunakan format JSON. Butuh sekitar 2 minggu untuk melakukannya. Saya sebenarnya berterima kasih kepada Microsoft untuk mengintegrasikannya karena tanpa itu, saya harus menulis sedikit kode tambahan.

searah jarum jamq
sumber
Saya pikir ada beberapa kebingungan atas pertanyaan dan jawaban ini mengandung banyak spekulasi.
marr75
@ Eric P: sama sekali tidak ada yang salah dengan VB.
Taptronic