Neden Herkes jQuery için XML Üzerinde JSON Seçiyor? [kapalı]


155

XML'in son derece taşınabilir olduğunu ve mini veritabanı olarak kullanılabileceğini düşündüm. Her yerde XML kullanıldığını gördüm. Hatta büyük şirketlerin JSON'a geçtiğini görüyorum . Microsoft bile JSON için tümleşik desteğe sahiptir. JSON üzerindeki tüm aldatmaca nedir?


14
"herkes" ve "her yer" çok mutlak terimlerdir ...
Matthew Groves

73
@eliben XML aslında emmez. Çok güçlü ama bir roketatar ile av tavşanları gibi, her zaman en iyi seçenek olmayabilir.
Dan

20
İnsanların şu anda XML için ne kullandıklarının çoğu
JSON'da

39
@Dan Sadece XML bir roketatar ile av tavşanları kadar eğlenceli olsaydı (muhtemelen - kendim denedim diyemem)
David Johnstone

4
çünkü 'XML'e Yağsız Alternatif' -json.org
DMin

Yanıtlar:


226

Temel olarak JSON yerel olarak JavaScript tarafından tanındığından, gerçekten hafif, minimalist ve son derece portatiftir, çünkü sadece iki temel yapıya dayanır:

  • Bir isim / değer çifti koleksiyonu. Çeşitli dillerde, bu bir nesne, kayıt, yapı, sözlük, karma tablosu, anahtarlı liste veya ilişkilendirilebilir dizi olarak gerçekleştirilir.
  • Sıralı değerler listesi. Çoğu dilde bu bir dizi, vektör, liste veya dizi olarak gerçekleştirilir.

3
+1 .. gerçekten .. pek çok farklı veri türü destek ham xml metne kıyasla çok önemli
Xinus

48
+1, özellikle JSON ayrıştırma, parça parça bile olsa XML ayrıştırma işlemine kıyasla inanılmaz derecede daha verimli olduğu için. Önem verdiğiniz veri kümeleri belirli (ve korkutucu derecede küçük) bir eşiği aştığında, performans farkı fark edilir.
Magsol

1
Birisi bana JSON ayrışmasının modern tarayıcılarda XML'den daha hızlı olduğunu söyleyen verileri gösteriyor. Burada SO üzerine bir cevap aksini söylüyor: stackoverflow.com/questions/4596465/…
HD

136

Farklı ad alanlı şemaları karıştırmaya başlayana kadar XML gerçekten parlamaya başlamıyor. Daha sonra JSON'un düşmeye başladığını görürsünüz, ancak verileriniz için bir serileştirme formatına ihtiyacınız varsa, JSON daha küçük, daha hafif, daha insan tarafından okunabilir ve genellikle XML'den daha hızlıdır.


31
Hangi XML'in gerçekten yararlı olduğunu göstermek için +1. İnsanlar çok daha basit bir şeyle bile olsa XML kullanırlar.
Daniel Pryden

1
Evet, burada jcd ve Daniel'le hemfikir olacak. XML'nin neden bazı şeyler için hala oldukça iyi olduğuna dair kaliteli yanıt.
bilinencitizen

3
XML nasıl daha az okunabilir, XML hiyerarşisinin çok daha anlaşılır (kesinlikle biraz garip) olduğunu düşündüğüm json'u okumak neredeyse imkansız. Belki de JSON ile yeterince çalışmadım
Colton

ad alanları, XML ile bir şeyler yaptığınızda belirli sorunları çözmek için bir xml çözümüdür. Json kullanıyorsanız, aynı sorunları json'da çözmek için bir json çözümü bulun . Bana göre ad alanları argümanı "Oh! Ama json'un nitelikleri yok!"
redben

61

JSON'un XML üzerinden büyük bir faydasının, verilerin nasıl biçimlendirileceğine karar vermek zorunda olmadığım olduğunu düşünüyorum. Bazılarının gösterdiği gibi, XML'de basit veri yapılarını bile yapmanın sayısız yolu vardır - unsurlar olarak, öznitelik değerleri vb. Dağınıklık.

XML'in avantajları olabilir, ancak temel veri değişimi için JSON çok daha kompakt ve doğrudandır. Bir Python geliştiricisi olarak, JSON ve Python'daki basit veri türleri arasında empedans uyuşmazlığı yoktur. Yani belirli bir Ski resort için kar koşulları hakkında soran bir AJAX sorgusu için bir sunucu tarafı işleyicisi yazıyordum, ben aşağıdaki gibi bir sözlük oluşturmak istiyorum:

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

JSON aracılığıyla çevrildiğinde (Python için 'simplejson' gibi bir kitaplık kullanılarak), ortaya çıkan JSON yapısı neredeyse aynı görünür (JSON hariç, booleans daha düşük kasalıdır).

Bu yapının kodunun çözülmesi, yerel bir iPhone uygulaması için Javascript veya Objective-C veya C # veya bir Python istemcisi için yalnızca bir JSON ayrıştırıcı gerektirir. Şamandıralar şamandıra, dizgiler string ve booleanlar boolean olarak yorumlanacaktır. Python'daki 'simplejson' kitaplığını kullanarak,simplejson.loads(some_json_string) ifade bana yukarıdaki örnekte yaptığım gibi tam bir veri yapısı geri verecektir.

XML yazsaydım, öğeler mi yoksa nitelikler mi yapılacağına karar vermeliydim. Aşağıdakilerin her ikisi de geçerlidir:

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

Bu yüzden sadece istemciye göndermek isteyebileceğim verileri düşünmekle kalmamalı, aynı zamanda nasıl biçimlendirileceğini de düşünmeliyim. XML, kurallarına daha katı olarak sade SGML'den daha basit olsa da, bu veriler hakkında düşünmek için hala çok fazla yol sağlar. O zaman onu üretmeye devam etmeliydim. Ben sadece bir Python sözlüğü (veya diğer basit veri yapısı) almak ve "XML içine kendiniz gidin" diyemedim. Bir XML belgesi alamadım ve derhal özel bir ayrıştırıcı yazmadan veya XML Şeması / Relax NG ve diğer bu tür acıların ek yükünü gerektirmeden "kendiniz nesnelere ve veri yapılarına gidin" diyemedim.

Kısaca, özellikle hızlı değişimler için verileri JSON'a kodlamak ve kodunu çözmek çok daha kolay ve çok daha doğrudan. Bu, JavaScript / JSON'da yerleşik olarak bulunan temel veri türleri (listeler, sözlükler, vb.) Doğrudan Python, Perl, Ruby vb. İle aynı veya benzer veri türleriyle eşleştiğinden, dinamik bir dil geçmişinden gelen insanlar için daha fazla uygulanabilir.


34

JSON'un performansı çoğu kullanım durumu için XML'den çok farklı değildir, JSON derin yuva yapıları için uygun değildir ve okunabilir ... hata ayıklamayı zorlaştırır]]]}]


31

XML ile karşılaştırıldığında hafiftir. Ölçeklendirmeniz gerekiyorsa, bant genişliği gereksinimlerinizi azaltın!

JSON karşılaştırması

 [
      {
           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"
      }
 ]

XML'e:

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

23
sadece daha küçük değil, daha insan dostu. XML, bir insanın bilgisayar gibi konuşmaya yönelik zayıf bir girişimine benziyor.
deft_code

15
XML'iniz, basit türler (ad / değer) öğeleri yerine XML özelliklerini de azaltabilir
Matthew Whited

4
@ Mathew: Evet, ama sonra tutarsız ve çirkin görünüyor. Ve hala öğe için açma / kapama etiketlerine ihtiyacınız var. JSON (en iyi), kullanmanız gereken etiket sayısını yarıya indirir.
Ron Gejman

2
Marc'ın örneğine bakın. Senin versiyonunun nasıl okunacağını görmüyorum. stackoverflow.com/questions/1743532/…
Matthew Whited

1
fark uzunluğunun benim için büyük görünmüyor
vtd-xml-author

28

Sadece kendi kişisel deneyimimden bir fıkra:

Önce XML'deki verilerle küçük bir Javascript dizini yazdım ve sonra yan yana çalıştırabilmem ve hızları Firebug ile karşılaştırabilmem için JSON'u kullanmaya uyarladım. JSON yaklaşık 3 kat daha hızlı sonuç verdi (tüm verileri görüntülemek için 350-400 ms - 1200-1300 ms). Ayrıca, diğerlerinin de belirttiği gibi, JSON gözlerde çok daha kolay ve daha ince işaretleme nedeniyle dosya boyutu iyi bir% 25 daha küçüktü.


2
Herkes bu kriterleri oluştursaydı, tartışacak hiçbir şeyimiz olmazdı.
12'de

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>

Niteliklerle XML güzel. Ancak bazı nedenlerden dolayı, ev yapımı XML genellikle% 100 elemanlardan oluşur ve çirkin.


2
Bu hala JSON örneğinden daha fazla boşluk olmayan karakterdir. Nitelikleri ayrıştırmak XML'de daha can sıkıcı olabilir.
jmucchiello

4
Muhtemelen karmaşık tipler gerçekten sadece elemanlarda tanımlanabilir, böylece çoğu aracın varsayılanı. Bu XML'nin kullanımı ve okunması çok kolay olduğunu kabul ediyorum.
Matthew Whited

18

JavaScript ile kolay tüketim bunun nedenlerinden biri olabilir ..


6
Bunu kullanmamın büyük nedeni bu. XML'i manuel olarak ayrıştırmak kabus gibi karmaşıktır. Ayrıca, ilk olarak JSON oluşturmak için Python kullandığımdan beri, veri ve nesneleri çok benzer bir şekilde ele alıyorlar, yani serileştirme her şeyi mutlu ediyor!
RandomInsano

10

JSON, özellikle JavaScript'teki yerleşik destek nedeniyle, web servislerindeki boyutu ve kullanım kolaylığı nedeniyle web uygulamalarındaki verilerin tüketimi için en iyisidir . JSON'daki anlık aramaya kıyasla bir xml parçasını ayrıştırmak için hesaplama yükünü hayal edin.

Çok iyi bir örnek JSON-P'dir. Verileri doğrudan işlevde tüketilebilmesi için, my_callback({"color": "blue", "shape":"square"});dinamik olarak oluşturulmuş bir <script>etiketin içinde olduğu gibi, bir geri arama işlevi çağrısına sarılmış bir web servisinden verileri geri alabilirsiniz my_callback(). XML kullanarak bu kolaylığa bile yaklaşmanın bir yolu yoktur.

XML, XSLT kullanarak veri sayfalarını birden çok biçimde işleme çerçevesine sahip olduğunuz büyük belgeler için tercih edilen biçim olacaktır. XML, diğer birçok kullanım arasında okunabilirlik için uygulama yapılandırma dosyalarıyla da kullanılabilir.


8

Buradaki hiç kimse XML'lerin ana avantajından bahsetmedi: doğrulama kuralları (DTD, XSD). Benim sonuçlarım, her ikisini de kullanarak:

  • JSON özellikle sunucu ve istemci tarafını kendiniz geliştirirseniz ajax için mükemmeldir. Temelde sunucu komut dosyasında js nesneleri oluşturun!
  • Büyük bürokratik kuruluşlar arasında veri alışverişi standartları belirlemeniz gerektiğinde XML kurumsal ortamlarda parlar. Çoğu zaman, bir taraf kendi pay aylarını bir diğerinden önce geliştirir, bu yüzden kabul edilen XSD'ye karşı isteklerini doğrulamaktan gerçekten yararlanır. Ayrıca, büyük şirketlerde veri aktarımı genellikle farklı sistemler arasında çevrilir. Bu da XML'in gücü, düşün XSLT. Örnek: kodsuz JSON'a dönüştürme: p

Tabii ki, json-schema geliştiriliyor, ancak hiçbir yerde yerleşik destek bulamazsınız.

Ben her ikisinin de hayranıyım, sadece farklı güçleri var.


6

Artık çoğu dil için JSON kodlayıcıları ve kod çözücüleri olduğuna göre, mantıklı olan kullanımlar için JSON'u KULLANMAMAK için hiçbir neden yoktur (ve muhtemelen XML için kullanım örneklerinin% 90'ı).

Şema değişikliklerini kolaylaştırmak için büyük SQL veritabanlarında kullanılan JSON dizelerini bile duydum.


5

Dürüst olmak gerekirse, JSON ve XML arasında her türlü veriyi temsil edebilecekleri kadar çok farklı değil. Bununla birlikte, XML sözdizimsel olarak JSON'dan daha büyüktür ve bu onu JSON'dan daha ağır hale getirir.


1
Cevabınızı özellikle ilham verici bulamadı, ancak yanlış değildi, bu yüzden aşağı oylar haksız görünüyordu.
deft_code

XML'in JSON'un uygun bir üst kümesi olacak şekilde kullanılabileceğini belirten +1 .
Sebastian

5

JSON'un JavaScript programlamada empedans uyuşmazlığı yoktur. JSON tamsayılar, dizeler, listeler, diziler içerebilir. XML sadece tüketilmeden önce tamsayılara ayrıştırılması gereken elemanlar ve düğümlerdir.


Öğeleri ayrıştırma ihtiyacı, bir engelleme uyumsuzluğuna eşit değildir.
Rob

9
Bir engelleme uyuşmazlığı, nesnelerin ilişkisel eşlemede olduğu gibi kavramların bir biçimden diğerine temiz eşlenmemesidir. Bazı şeyleri nesnelerle ifade etmek çok kolaydır, ancak SQL ile zorlanırken, diğer şeyleri SQL kullanarak ifade etmek kolaydır, ancak nesne hiyerarşileri bunları açıkça ifade etmekte zorlanır. XML ve JSON ile, biri anlamlara ulaşmak için diğerinden biraz daha fazla çalışma gerektirir, ancak bu gerçekten ayrıştırma araçlarına bağlıdır. Etkileyici (çoğunlukla) aynıdır.
jcdyer

4

Her ikisi de harika ve çok taşınabilir. Ancak JSON, çoğu durumda (daha hızlı teslimat süresine dönüşür) daha az karaktere serileştirildiğinden ve JavaScript nesne sözdizimiyle eşleştiğinden, doğrudan Ajax'ın çok daha kolay olmasını sağlayan bir bellek içi nesneye çevrilebilir . uygulamak.

XML hala harika. JSON, XML ile karşılaştırıldığında sadece "en yeni ve en büyük".


1
Ve JavaScript'in daha yeni sürümlerinin "güvenli" (eval-free) yerleşik JSON kodlayıcıları ve kod çözücüleri dahil etmeye başladığına inanıyorum.
Nosredna

4

JavaScript tarafından kolayca ayrıştırılır ve hafiftir (JSON'daki bir belge, aynı verileri içeren bir XML belgesinden daha küçüktür.)


3

JSON etkili bir şekilde serileştirilmiş JavaScripttir, çünkü (aJsonString) doğrudan bir JavaScript nesnesine değerlendirebilirsiniz. Bir tarayıcının içinde, beyinsiz bir JSON, JavaScript için mükemmel şekilde uygundur. Aynı zamanda JavaScript çok gevşek yazılan dinamik bir dildir ve bir Xml / Xsd belgesinde bulunan tüm spesifik tür bilgisinden doğal olarak yararlanamaz. Bu ekstra meta veriler (birlikte çalışabilirlik için mükemmeldir) JavaScript'te bir engeldir ve çalışmak daha sıkıcı ve can sıkıcıdır.

Boyut ve Performans

Bir tarayıcıdaysanız, JSON daha basit, daha kompakt ve daha da önemlisi yerel olarak desteklendiği için serileştirmek / serileştirmek daha hızlıdır. Kullanılabilir farklı serileştiriciler arasındaki boyutu ve hızı karşılaştıran bazı northwind veritabanı kriterleri var. Temel Sınıf Kitaplığı'nda Microsoft'un XML DataContract serileştiricisi, JSON'undan % 30 daha hızlıdır. Bu bir geliştirmeyi başardı Microsoft kendi XML seri hale koymak çaba ile ilgisi daha sahip olmasına rağmen JsonSerializer fazla olduğu 2.6x daha hızlı XML olandan. Karşılaştırma ölçütlerine dayanan yüklere gelince, XML kabaca 2 kattan fazla görünüyorJSON boyutu. Ancak, XML yükünüz aynı belge içinde birçok farklı ad alanı kullanıyorsa, bu hızlı bir şekilde patlayabilir.


2

XML çoğu durumda şişirilmiş yılan yağıdır. JSON size avantajların çoğunu şişkinlik olmadan verir.


1

Burada belirtilenlerden başka önemli bir avantaj. Aynı veriler için, bunu bir XML dosyası olarak göstermenin birden fazla yolu vardır, ancak JSON ile yalnızca bir yol, belirsizliği ortadan kaldırır :)


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

0

Şimdiye kadar uzman değilim ama çalıştığım çeşitli şirketlerden genellikle XML'i küçük veri ortamlarında veya yapılandırma değerlerinde kullanıyoruz (web.config harika bir örnektir).

Genel olarak büyük miktarlarda verileriniz olduğunda, bu veriler hakkında rapor oluşturmak istersiniz. Ve XML raporlama için mükemmel bir kaynak değildir. Büyük şemada, işlemsel bir veritabanını XML'den daha kolay raporlamak / aramak gibi görünüyor.

Bu mantıklı mı? Yukarıda söylediğim gibi, ben uzman değilim ama deneyimlerime göre bu durum böyle görünüyor. Ayrıca, kullanıcı arayüzünün ( Ajax ) görsellerini geliştirmek için istemci tarafına veya komut dosyası eylemlerine geçen geliştirici dalgası nedeniyle Microsoft'un entegre JSON desteğine ve Microsoft'un Ajax'in jQuery ve MooTools ( Yahoo'nun YUI'sı da bu karışımda) JSON kullanarak serileştirilebilir nesnelerin güzel entegrasyonu nedeniyle.

Kendimi şimdi VB kodumda JSON serileştirici uygulayarak kod yazma bulmak. Çok kolay ve bir yükseltme / değiştirme açısından, onu yenemezsin. Microsoft'un bizi VS'ye bağımlı tutmanın yolu sanırım. Son zamanlarda bir kurumsal uygulama Ajax (jQuery aracılığıyla) kullanarak ve JSON biçimini dönüştürdüm. Bunu yapmak yaklaşık 2 hafta sürdü. Aslında Microsoft'a entegre olduğu için teşekkür ediyorum çünkü onsuz oldukça fazla kod yazmak zorunda kalıyordum.


Soru üzerinde biraz karışıklık olduğunu düşünüyorum ve bu cevap çok fazla spekülasyon içeriyor.
marr75

@Eric P: VB'de kesinlikle yanlış bir şey yok.
Taptronic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.