Bisakah kita mengganti XML dengan JSON sepenuhnya? [Tutup]

78

Saya yakin banyak pengembang yang akrab dengan XML dan JSON , dan mereka telah menggunakan keduanya. Jadi tidak ada gunanya menjelaskan apa mereka, dan apa tujuan mereka, bahkan secara singkat.

Jika kita mencoba memetakan konsep mereka, kita dapat mengatakan (koreksi saya jika saya salah):

  1. Tag XML setara dengan JSON {}
  2. Atribut XML setara dengan properti JSON
  3. Koleksi tag XML setara dengan JSON []

Satu-satunya hal yang dapat saya pikirkan, yang tidak ada di JSON, adalah XML Namespace .

Pertanyaannya adalah, mengingat pemetaan ini, dan mempertimbangkan bahwa JSON sangat ringan dalam pemetaan ini, dapatkah kita melihat dunia di masa depan (atau setidaknya secara teoritis memikirkan sebuah dunia) tanpa XML, tetapi dengan JSON melakukan semua yang dilakukan XML? Bisakah kita menggunakan JSON di mana saja XML digunakan?

PS: Harap dicatat bahwa saya sudah melihat pertanyaan ini . Ini sesuatu yang sama sekali berbeda dari apa yang saya tanyakan di sini. Jadi tolong jangan menyebutkan duplikat .

Saeed Neamati
sumber
14
Kita dapat (dan harus) mengganti semua hal yang didesain secara berlebihan dengan ekspresi S, jelas. Dunia tanpa XML memang akan menjadi tempat yang jauh lebih baik, tapi sayangnya, itu hanyalah angan-angan.
SK-logic
19
Ugh. Saya benci pertanyaan ini. Saya pikir ini benar-benar kasus untuk menggunakan alat yang tepat untuk pekerjaan itu, dan bukan apakah seseorang dapat menggantikan yang lain sama sekali. Ada sangat sedikit kemutlakan di dunia, bahkan dengan komputer. Saya tidak bisa membayangkan melakukan hal-hal yang saya lakukan dengan JSON, setidaknya di mana teknologi masing-masing berdiri sekarang.
Philip Regan
2
@ Pilip, ini bukan pertanyaan untuk menghancurkan sesuatu. Ia hanya mencoba melihat kekurangan JSON, sehingga kami dapat memperbaikinya. :)
Saeed Neamati
4
Sebuah diskusi tentang perbedaan antara dua teknologi untuk melihat di mana perbaikan dapat dilakukan sangat berbeda daripada bertanya apakah satu dapat diganti dengan yang lain. Yang pertama adalah ulasan yang lebih ilmiah daripada yang terakhir yang terdengar lebih antagonis dari frustrasi daripada apa pun
Philip Regan
12
Ini bukan hipotesis. JSON tampaknya tidak memiliki fitur yang dimiliki XML.
S.Lott

Jawaban:

153

Hal yang memberi XML kekuatannya dan banyak kerumitannya adalah konten campuran. Hal-hal seperti ini:

<p>A <b>fine</b> mess we're in!</p>

Jangan pernah mencoba melakukannya di JSON, atau memanipulasinya dalam bahasa pemrograman konvensional. Mereka tidak dirancang untuk pekerjaan itu.

Pertanyaan semacam ini biasanya datang dari orang-orang yang lupa bahwa M dalam XML adalah singkatan dari markup. Ini adalah cara mengambil teks biasa dan menambahkan markup untuk membuat teks terstruktur. Ini cukup berguna untuk data kuno juga, tapi bukan itu yang dirancang untuk atau di mana kekuatan utamanya berada. Ada banyak cara untuk menangani data sederhana, dan JSON adalah salah satunya.

Michael Kay
sumber
33
+1: Ini adalah fitur yang membedakan. Poin luar biasa.
S.Lott
7
@Michael, Anda baru saja mengajari saya sesuatu yang berharga. Ini jawaban yang bagus. +1.
Saeed Neamati
9
.... Ada 3 node indie dari P,, A elemen B, dan `mess we in!`. Ini adalah array, yang bisa Anda jelaskan di JSON.
Incognito
5
@ Bob Tidak, tapi saya jelaskan bahwa Anda dapat mendefinisikan hal-hal yang diungkapkan oleh HTML dengan lebih jelas, dan mungkin penguraian lebih cepat melalui JSON (karena lebih sedikit penguraian teks diperlukan untuk menemukan berbagai jenis node). Jika HTML adalah JSON-ML, kita mungkin memiliki lebih banyak pengembang yang benar-benar memahami DOM, simpul teks, dan binding.
Incognito
5
@ BryneReese: ya itu XML, dan ya itu valid. Itu juga HTML adalah intinya; sebenarnya, XHTML juga XML yang valid. :-)
Martijn
31

Perbedaan utama, saya pikir, adalah pada kenyataan bahwa XML dirancang untuk menjelaskan sendiri dengan dtd dan segalanya.

Dengan JSON, Anda harus mengasumsikan banyak tentang data yang Anda terima.

Maarten van Leunen
sumber
7
"XML dirancang untuk menjelaskan sendiri". Bisakah Anda memberikan tautan atau referensi untuk ini? Saya tidak melihatnya dalam standar W3C untuk XML, dan saya ingin tahu dari mana gagasan ini berasal. Saya tampak seperti legenda urban lebih dari tujuan desain yang dinyatakan.
S.Lott
6
@ S.Lott: Saya pikir apa yang ia maksud dengan itu adalah sifat dari tag XML, di dalam dan dari dirinya sendiri, memungkinkan konten yang ditandai untuk menjadi jelas, yaitu, DTD adalah opsional sehingga XML yang dibentuk dengan baik dapat diurai tanpa satu. Tapi saya setuju dengan pendapat Anda tentang masalah ini karena, secara teknis, JSON memiliki kemampuan yang sama, jadi saya tidak melihat penjelasan diri sebagai perbedaan utama sama sekali (saya tidak yakin mengapa ini terus dipilih), tetapi lebih tepatnya Michael Kay lebih tepat sasaran.
Philip Regan
5
@ S.Lott setuju. Saya harus mengatakan JSON di sini json.org/example.html lebih mudah dipahami dan didokumentasikan sendiri lebih baik daripada XML terkait karena kurangnya verbositas.
Doug T.
4
@Michael Borgwardt: Tanpa XSD penuh (termasuk semacam dukungan ontologi), nama tag tidak memberi tahu saya apa pun. "bermakna" sulit dicapai secara umum. Itu membuat saya tidak jelas apa yang dimaksud dengan "menjelaskan diri sendiri" dalam jawabannya. Dan saya tidak punya bukti bahwa itu bahkan tujuan desain untuk XML.
S.Lott
4
@Philip Regan: Seperti dengan "kode yang menjelaskan sendiri", tampaknya bukan fitur XML. Jika itu hanya tujuan implementasi universal yang berlaku untuk semua bahasa perangkat lunak (kode, akses data, markup, apa pun) maka mungkin orang tidak boleh menyebutkannya di sekitar XML secara khusus.
S.Lott
21

Terjemahan literal ke JSON sering kurang ringkas dan kurang jelas. Mempertimbangkan:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

Representasi JSON paling efektif yang pernah saya lihat tentang ini:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

Sekarang, bayangkan itu untuk seluruh file XML. Saya tidak mengatakan bahwa JSON tidak memiliki tempatnya, tetapi XML tidak boleh dikesampingkan.

cwallenpoole
sumber
8
Sekarang pertimbangkan SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic
2
@ SK-Logic: Itu bagus untuk contoh yang sepele, tapi saya tidak bisa membayangkan melakukan konten yang bersarang mendalam — seperti buku — dengan itu. Saya pikir SXML adalah latihan akademis seperti halnya apa pun.
Philip Regan
3
@ Philip Regan: Bagaimana bisa menulis S-Exp lebih sulit daripada menggunakan chevronitis, ketika itu adalah transformasi sepele 1: 1 menjadi bentuk yang kurang bertele-tele?
maaartinus
@maartinus: Bidang keahlian saya adalah dalam penerbitan buku: buku teks dalam bentuk apa pun adalah binatang buas yang dalam dan kompleks dengan beragam konten yang memerlukan manajemen eksplisit. DocBook dan DITA jauh lebih mudah dibaca daripada contoh yang diberikan di atas.
Philip Regan
1
@Philip Regan, SXML sangat mudah diedit, tidak seperti XML. Dan tentu saja itu adalah pilihan yang jauh lebih baik untuk protokol, tidak perlu menyebutkan keunggulan dari tooling yang tersedia.
SK-logic
14

JSON dan XML adalah keduanya cara memformat data. Keduanya mampu melakukannya dengan sangat baik, jadi bisakah JSON melakukan semua yang dilakukan XML? Iya.

Tapi ..... Pertanyaan yang lebih relevan mungkin bukan apa yang dapat dilakukan XML / JSON, melainkan apa yang dapat Anda lakukan dengan XML / JSON.

Ada beberapa hal yang dapat Anda lakukan dengan XML yang saya pikir Anda tidak bisa dengan JSON, seperti menerjemahkan dengan XLST, mencari dengan XPath dan memvalidasi dengan skema. Semua sangat, sangat bermanfaat.

Qwerky
sumber
5
Kecuali untuk konten campuran di mana data berisi tag. JSON sama sekali tidak melakukannya dengan baik.
S.Lott
11

Ada banyak fungsi menggunakan XSLT yang mungkin tidak dapat dilakukan dengan JSON. Jadi, jika mereka tidak setara secara fungsional mereka tidak dapat saling menggantikan.

StuperUser
sumber
3
Yang mengatakan, Anda bisa menggunakan bahasa lain untuk deserialise, memanipulasi dan serialisasi JSON, dan XSLT bukan XML, jadi titik ini benar-benar diperdebatkan.
StuperUser
3
XSLT adalah XML - lihat skema di sini
treecoder
Terima kasih @ Grengeng, saya hanya punya paparan singkat untuk itu, memperbarui jawabannya.
StuperUser
2
@StuperUser: Bagaimana mungkin "tidak mungkin" dengan JSON? Ini hanya transformasi, mungkin alatnya belum ada. Atau apakah masalah terkait dengan kurangnya atribut di JSON?
maaartinus
1
@StuperUser: XSLT adalah bahasa (bagian dari XML) yang beberapa penerjemahnya ditulis dalam setidaknya satu bahasa lain (mungkin dalam C, Java, ...). Hal yang sama dapat dilakukan untuk JSON (tentukan beberapa JSON-T, tulis intepreter), bukan?
maaartinus
8

Faktanya adalah, kita harus hidup dengan keduanya untuk waktu yang lama, dan menjadi fanatik JSON "dianggap berbahaya."

Scott C Wilson
sumber
7

JSON cukup baru dan sistem lama tidak akan mendukungnya. Memutakhirkan sistem warisan adalah ekspesif dan memperkenalkan bug. JSON tidak akan mengganti XML kapan saja dalam waktu dekat.

Tom Squires
sumber
2
terima kasih untuk balasan Anda. Apa yang ada dalam pikiran saya, adalah tinjauan teknis, bukan strategi implementasi. Saya hanya ingin tahu misalnya, untuk versi baru dari sistem warisan itu, dapatkah kita menghapus XML sepenuhnya dan menggunakan JSON? Jika tidak, apa yang kita lewatkan di JSON?
Saeed Neamati
Di sisi lain, saya belum pernah menggunakan XML, hanya JSON, dalam beberapa tahun terakhir. Dan baguslah. Tentu saja XML lebih giat. Yang bagus untuk keamanan pekerjaan, tidak terlalu bagus untuk efisiensi.
gnasher729
6

Saya akan mengatakan bahwa cwallenpoole membuat poin yang bagus. Sementara sebagian besar XML dapat diterjemahkan ke JSON, apakah melakukan itu lebih baik karena itu adalah poin yang terpisah.

JSON cocok untuk struktur data setidaknya serta XML dan mungkin lebih baik, tetapi XML membaca jauh lebih alami daripada JSON ketika menandai dokumen tekstual, di mana tag digunakan dalam aliran teks yang lebih besar daripada hanya sebagai cara untuk membatasi hierarki bidang.

Meskipun HTML 5 mungkin memiliki parsernya sendiri, itu masih meninggalkan aplikasi seperti DocBook.

ssokolow
sumber
JSON jelas dapat berisi string yang dapat berisi HTML.
gnasher729
6

Itu tergantung pada domain. Dalam hal layanan web? Benar. Sangat memalukan bahwa vendor masih mendorong sabun pada pelanggan mereka. ISTIRAHAT + JSON sepanjang jalan.

Sekarang, ketika Anda berbicara tentang data yang kompleks dan terstruktur dengan informasi gaya seperti Docbook atau implementasi lainnya? Itu domain yang tepat untuk XML.

Jason Lewis
sumber
4

Mengapa membatasi diri ke JSON ketika YAML adalah super set dan jauh lebih ekspresif dan karena itu kuat daripada XML atau JSON.

Yang mengatakan, jika Anda menggunakan kerangka kerja serialisasi yang benar Anda harus dapat membuat serial dan de-serialisasi semua format yang disebutkan di atas dengan beberapa baris kode sederhana.


sumber
3

Itu menjadi jelek ketika Anda mencoba memodelkan dua objek ini di JSON:

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

Menggunakan JSON seperti yang biasa digunakan dalam 99% kasus, seseorang akan tersesat dengan:

{ name: "John Doe" } 

Dan sekarang Anda harus menambahkan beberapa struktur meta dan semua keindahan JSON hilang sementara Anda tertinggal dengan kerugian.

Michal Sampai
sumber
11
JSON yang setara dengan XML yang Anda sediakan adalah { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Jadi secara teknis, jawaban Anda tidak benar. :)
Saeed Neamati
Tentu, satu-satunya kekurangan JSON adalah atribut, dan tidak ada gunanya untuk memodelkan objek (tidak seperti markup). Kadang-kadang atribut digunakan sebagai jalan pintas untuk apa yang dapat diekspresikan menggunakan data bersarang (misalnya, dalam file konfigurasi Hibernate), yang berguna tetapi sebenarnya keberadaan pilihan membuatnya lebih sulit. File konfigurasi dan objek pemodelan adalah dua tempat di mana JSON jelas lebih unggul.
maaartinus
2
@ SaeedNeamati, jadi bagaimana Anda memodelkan <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>dalam JSON?
svick
6
{pelanggan: [{nama: 'John Doe'}, {name: 'John Doe'}]}?
scrwtp
2
@Stijn - benar, dan itu berfungsi, tetapi itu mengkonfirmasi komentar dari jawaban asli, bahwa "Anda harus menambahkan beberapa meta-struktur" untuk memodelkan hal-hal tertentu yang lebih alami di XML.
Matt R
3

Saya tidak tahu apakah ada fasilitas seperti itu untuk JSON, tetapi dalam. NET setidaknya Anda dapat memvalidasi XML terhadap skema yang diberikan. Itu keuntungan yang berharga dari XML di mata saya.

Berikan Palin
sumber
2
json memiliki skema, juga: json-schema.org
lordvlad