XML yerine JSON ne zaman tercih edilir?


148

Benim gereksinimim sadece bir forma veritabanından alınan bir değer kümesi görüntülemek için. Ben jquery kullanıyorum.

Yanıtlar:


149

Bunlardan herhangi biri doğru olduğunda XML'i JSON yerine tercih edin:

  • Mesaj doğrulamasına ihtiyacınız var
  • XSLT kullanıyorsunuz
  • Mesajlarınızda çok sayıda işaretlenmiş metin var
  • JSON'u desteklemeyen ortamlarla birlikte çalışmanız gerekir

Tüm bunlar doğru olduğunda JSON'u XML üzerinden tercih edin:

  • İletilerin doğrulanması gerekmez veya serileştirmelerini doğrulamak basittir
  • İletileri dönüştürmüyorsunuz veya diziselleştirmelerini dönüştürmek basit
  • İletileriniz işaretli metin değil, çoğunlukla veridir
  • Mesajlaşma uç noktaları iyi JSON araçlarına sahiptir

9
JSON, işaretlenmiş metinlerin işlenmesinde XML üzerinde herhangi bir avantaj sunmaz. Ama ne demek istediğini anlıyorum; bu abartılı olabilir.
Robert Rossney

10
Tüm koşullar eşit olduğunda, iki nedenden dolayı JSON'u tercih edin: JSON, XML'den (CPU dostu) ayrıştırmaktan çok daha hafiftir ve aktarılması çok daha az veri gerektirir (Ağ dostu).
Roger Barreto

Ne zaman XSLT kullanıyor ve XML kullanmıyorsunuz? Zaten XSLT kullanıyorsanız XML verilir. XML kullanma argümanını desteklememelidir. JSON.parse () kullanıyorsanız JSON kullanın demek gibi. Ayrıca, bir JSON nesnesini dönüştürmenin bir XSLT dönüşümü yazmaktan daha kolay olduğunu iddia ederim, ancak bu benim kişisel önyargım olabilir.
Spencer

JSON'un doğrulama kısmına tamamen katılmıyorum. JSON da doğrulanabilir. Bu IETF taslağını kontrol edin: bağlantı Bu bir taslak ama yine de ..
sotn

@sotn XML için PL / SQL'iniz yok (ör. XQuery). Bazı NoSQL DB (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba) için temel oluşturur
Dmytro

81

XML kullanmam gerekmedikçe JSON kullanıyorum. Anlamak daha basittir ve (daha az yapılandırma ek yükü gerektirdiğinden), kütüphaneler bağlamınızda kullanılabilirse ve şimdi oldukça yaygın olanları okumak ve yazmak için programlamak daha kolaydır.

Amazon kataloglarını bir web hizmeti olarak ilk ortaya çıkardıklarında, hem JSON hem de XML sundular. Uygulayıcıların% 90'ı JSON'u seçti.


56
"XML kullanmam gerekmedikçe JSON kullanıyorum." ~ Kesinlikle.
EndangeredMassa

2
Bu yüzden daha derin olan soru "XML'i hangi nedenlerle kullanmanız gerekir?" Bu sebepler aptal mı? Yoksa sizinkinden farklı bir bakış açısıyla, yalnızca farklı endişeleri mi yansıtıyorlar?
13ren

5
Yeniden yazmak istemediğim mevcut yazılımlar da dahil olmak üzere birkaç olası neden. Ama en önemlisi, XML'i her iki ucu da kontrol etmediğim bir veri değişim formatı olarak kullanmak veya XML'yi uygulayan ve gerektiren resmi bir standart var. Sadece ilgili tek geliştirici olduğumda keyfi olarak seçebilirim.
dkretz

15

Zaten istemci tarafında javascript yaptığınız özel durumunuz göz önüne alındığında, aşağıdaki nedenlerden dolayı JSON ile giderdim:

  • JSON javascript'e özgü olduğundan, istemci tarafına daha az kod yazmanız gerekir - JSON dizesini eval()(veya daha iyisi JSON.parse()) sadece kullanabilirsiniz ve kullanabileceğiniz bir nesne elde edin.

  • Aynı zamanda JSON'u istemci tarafında değerlendirmek daha verimli ve dolayısıyla daha hızlı olacaktır.

  • JSON serileştirmesi XML'den daha kısa dizeler üretir. JSON kullanılması, kablo üzerinden geçen veri miktarını azaltır ve bu bakımdan performansı artırır.

Daha fazla okuma: http://www.subbu.org/blog/2006/08/json-vs-xml


7
değil eval()hayır-hayır JSON bir Big ing?
08:17

@Shy, JSON'un kendi sitesi JSON'da eval'i kullanabileceğinizi söylüyor (parantez sarılmış olarak): json.org/js.html
strager

9
Json.org'dan alınmıştır: eval işlevi çok hızlıdır. Ancak, herhangi bir JavaScript programını derleyebilir ve yürütebilir, böylece güvenlik sorunları olabilir. Eval kullanımı kaynak güvenilir ve yetkin olduğunda belirtilir. Bir JSON ayrıştırıcı kullanmak çok daha güvenli
sarego

2
Eval () için JSON.parse () tercih edin.
Havvy

14

XML vs JSON relm'de karşılaştığım bazı şeyler:

JSON aşağıdakiler için çok iyidir

  • ad / değer çiftleri
  • bu çiftleri yuvalamak

Bu, bir diziyi veya iç içe diziyi sevme eğiliminde olduğu anlamına gelir. Ancak JSON her ikisini de eksik

  • Öznitellikler
  • ad alanlarının

Dolayısıyla, iki veya daha fazla JSON hizmetini birleştirirseniz, potansiyel ad alanı çakışmaları olabilir. JSON, deneyimlerimle veri alışverişinde XML'in kullanılabileceği şeylerin yaklaşık% 90'ı için kullanılabileceği söyleniyor.


Json'un başka bir sorunu, yeni bir json mesajı oluşturmak için iki json mesajını kolayca birleştirememenizdir. Genellikle iyi biçimlendirilmez ..
vtd-xml-author

7
Ne için özelliklere ihtiyacınız var? Öğeniz başka değerler içeriyorsa, onu bir nesne yapın - üyeler "öznitelikleriniz" dir. Açıkçası, bence XML'nin bifurcal nitelikleri / kap yapısı tamamen zararlıdır.
foo

JSON'un özniteliklere sahip olmamasının bir özellik olduğunu iddia ediyorum.
brian

11

Genellikle JSON daha kompakttır ve ayrıştırılması daha hızlıdır.

Aşağıdaki durumlarda XML'i tercih edin:

  • İstemcideki verileri işlemeniz gerekir ve bunun için XSL'den yararlanabilirsiniz. Muhtemelen XML + XSL zinciri özellikle büyük veri parçaları için JSON + JavaScript'ten daha hızlı çalışacaktır.
    • İyi bir örnek, verileri bir HTML pasajına dönüştürmektir.
  • Çeşitli eski durumlar:
    • Varolan bir XML hizmeti var ve bazı nedenlerden dolayı JSON ile yeniden yazmak bir güçlük.
    • Kullanıcının girişini kullanarak bazı hafif işlemlerden sonra bu verileri XML olarak geri göndermeniz gerekir.

(Neredeyse) XML'in önemli bir örneği: HTML parçacıkları gönderirken tespit etmeye çalışın ham veri göndermekten daha faydalıdır. AH AH basit uygulamalarda harikalar yaratabilir, ancak sıklıkla gözden kaçırılır. Genellikle bu stil, bir sunucunun, web sayfasında işlenmeden HTML satır parçacıkları gönderdiğini varsayar.

Genellikle AHAH vakalarında CSS, snippet'lere görsel olarak masaj yapmak ve snippet'in ilgili bölümlerini kullanıcıya özgü veya uygulamaya özgü ayarları kullanarak gizlemek / göstermek gibi basit koşulların uygulanması için maksimuma çıkarılır.


8

JSON ayrıştırmak kolay ve hızlıdır. XML ayrıştırılması biraz daha zordur ve ayrıştırılması ve aktarılması daha yavaştır (çoğu durumda).

JQuery kullandığınız için, JSON kullanmanızı öneririm: jQuery JSON verilerini alabilir ve otomatik olarak bir Javascript nesnesine dönüştürebilir. Aslında, eval kullanarak JSON verilerini bir Javascript nesnesine dönüştürebilirsiniz . XML sizin tarafınızdan manuel olarak dönüştürülmelidir (bunun Javascript'te nasıl çalıştığını bilmiyorum, ancak XML kitaplıklarını kullandığım çoğu dilde zor / daha can sıkıcı).


1
JSON tanım gereği bir JavaScript nesnesidir, jQuery gerçekten özel bir "dönüştürme" yapmaz. Sadece açıklığa kavuşturulması gerektiğini düşündüm.
Brian Gianforcaro

5
JSON, JavaScript'te başlatılmadığı sürece bir javascript nesnesi değildir. Javascript nesnelerini serileştirmek için kullanılan formatı takip eder, ancak çoğu dilden (en azından XML kadar kolay) erişilebilir (uygun eklentiler ve yerleşikler ile).
dkretz

@Gianforcaro, bunu anlıyorum. Bunu daha açık bir şekilde belirtmek için yazımı düzenleyeceğim. @ doofledorfer, dedim "ve bir Javascript nesnesine dönüştür." JSON verisinin bir Javascript nesnesi olduğunu söylemedim.
strager

Ah, üzgünüm, yakalamadım.
strager

8

İstemci tarayıcısının verileri ayrıştırmak için yapması gereken işlem açısından JSON her zaman tercih edilir. Ayrıca, JSON hafif veri değişim formatıdır.

XML ayrıştırma her zaman çok fazla tarayıcı kaynağı tüketir ve aksi belirtilmedikçe mümkün olduğunca kaçınılmalıdır.


7

Her konuda bazı avantajları ve dezavantajları yanı sıra bir özet sağlayan web protokolleri (yani SOAP, XML, JSON, REST, POX, vb) tarihini detaylandıran konuda bir blog yazısı var: http://www.servicestack.net / mythz_blog /? p = 154

Aslında dinamik (JSON) ve statik (XML) diller arasındaki farkları karşılaştırarak XML ve JSON arasında birçok benzerlik çizebileceğinizi düşünüyorum.

Temel olarak XML, isteğe bağlı olarak eşlik eden bir şema (XSD veya DTD) ile doğrulanabilen daha katı, daha katı bir serileştirme biçimidir. XSD'ler oldukça ayrıntılıdır ve Tarihler, Zamanlar, Numaralandırmalar, Kullanıcı Tanımlı Türler ve hatta Tür devralma gibi birçok farklı türü tanımlamanızı sağlar. SOAP, web hizmetlerinizi tanımlamak için standartlaştırılmış bir yol sağlayan XML özellik kümesinin üzerine etkili bir şekilde oluşturulur. örneğin, türler ve işlemler) bir WSDL aracılığıyla. WSDL spesifikasyonunun ayrıntı ve karmaşıklığı, geliştirmenin daha sıkıcı olabileceği anlamına gelir, ancak aynı zamanda sizin için çok daha fazla araç vardır ve çoğu modern dil, bazı yükleri alarak müşteri proxy'lerinizi oluşturmak için otomatik araçlar sağlar harici servislerle birlikte çalışmayı denerken kapalı.

Sık sık değişikliğe tabi olmayan, iyi tanımlanmış bir 'kurumsal hizmetiniz' varsa veya web hizmetinize birçok farklı dilden erişilmesi gerekiyorsa, web hizmetleriniz için XML kullanmanızı öneririm.

Tüm faydaları için XML de dezavantajları ile birlikte gelir. Yazılan genişletilebilir bir biçim sağlamak için ad alanlarına güvenir ve aynı belgedeki öznitelikleri ve öğeleri belirtmenizi sağlar. Bir belgede farklı ad alanlarına sahip olmak, verileri çıkartmak için bir Xml Parser'ı kullanırken çok fazla zaman alır, ayrıca almak / çaprazlamak istediğiniz her öğenin ad alanını sağlamanız gerekir. Ayrıca, yükü olması gerekenden daha ayrıntılı hale getirir. Öğelerin yanı sıra nitelikleri de çıkarma seçeneğine sahip olmak, sınıflarınızın bir XML belgesiyle iyi eşleşmediği anlamına gelir. Bu özellikler tek başına, çoğu dil için çalışmayı daha sıkıcı ve zahmetli hale getiren programa uygun değildir.

Öte yandan JSON, çok gevşek yazıldığından ve yalnızca temel türler için basit bir desteğe sahip olduğu için XML'in tam tersidir: Number, Bool, string, Objects and Arrays. Diğer her şey aslında bir dizeye sığmalıdır. Dil sınırları arasında iletişim kurmaya çalışırken bu harika değildir, çünkü daha spesifik türleri desteklemek istiyorsanız bazı bant dışı standart dışı belirtimlere uymanız gerekecektir. Baş üzerindeki sınırlı özellik kümesi çoğu dilde iyi bir programatik geçme yapan - ve JSON dize edilebilir olarak mükemmel JavaScript için uygundur eval'ed JavaScript nesnesine doğrudan.

Boyut ve Performans

Microsofts XML ve JSON uygulamaları arasındaki boyut ve hızı karşılaştıran bazı northwind veritabanı karşılaştırmaları var . Temelde XML, JSON'un boyutunun 2 katından fazladır, ancak aynı zamanda Microsoft, JSON'larından% 30'dan daha hızlı olduğu için XML DataContractSerializer'ı optimize etmek için çok çaba sarf ediyor gibi görünüyor. Görünüşe göre boyut ve performans arasında bir denge kurmanız gerekiyor. Bu gerçeğinden memnun değilim , şimdi MS'in XML'sinden 2.6x daha hızlı olan kendi hızlı JsonSerializer'ımı yazmaya karar verdim - her iki dünyanın en iyisi :).


6

Gelen veri yığınını doğrulamak gerekirse ben JSON XML seçin, çünkü XML nativly XSD aracılığıyla bu destekler.


3

Gönderen JSON - son ayaklar

JSON rotasını izlediğinizde, XML'in 10 yıl önce karşılaştığı sorunlarla aynı sorunla karşılaşırsınız:

İki farklı kaynaktan alınan verileri bir JSON paketine karıştırmak, eleman etiketlerinin birbirine çarpmasına neden olabilir. Ambalaj fişini ve faturayı karıştırın ve aniden Kimden adresi oldukça farklı bir şey anlamına gelebilir. Bu yüzden XML'in ad alanları vardır .

Farklı JSON yapıları arasında dönüştürme, sıralı kod yazmayı gerektirir. Verileri haritalamanın daha açıklayıcı bir yolu işi kolaylaştırır. Bu yüzden XML'de XSLT vardır .

Bir JSON paketinin yapısını (alanları, veri türleri vb.) Tanımlamak, insanların hizmetlerinize bağlanması için gereklidir. Bunun için bir meta veri diline sahip olmak önemlidir. Bu yüzden XML'in Şemaları vardır .

İki eşzamanlı istemci-sunucu görüşmesi yürütmek özen gösterir. Sunucuya iki soru sorar ve bir cevap alırsanız, hangi soruyu cevapladığını nereden biliyorsunuz? Bu yüzden XML WS-Korelasyonuna sahiptir .


2
Ad alanları yalnızca başka bir çözümdür; isterseniz aynısını JSON'da da yapabilirsiniz. WS-Korelasyonu da XML'ye sonradan düşünülen bir şey olarak eklendi ve "yerleşik" değil. JSON'a da ekleyebilirsiniz. Yapı açıklaması (Şemalar) XML için özel değildir; bunu eBNF'nin icadından bu yana herhangi bir biçimsel dile çeşitli şekillerde yapabilirsiniz. Yine de XSLT geçerli bir satış noktasıdır.
foo

2

JSON javascript için yerel kodlamadır. Çalışması çok daha hızlı ve kolay olmalıdır.


2

Http://json.org/xml.html adresindeki ilk satırdan

Genişletilebilir İşaretleme Dili (XML), Standart Genelleştirilmiş İşaretleme Dili'nden (SGML) türetilmiş bir metin biçimidir. SGML ile karşılaştırıldığında XML basittir. HyperText İşaretleme Dili (HTML), karşılaştırıldığında, daha da basittir. Yine de, HTML üzerine iyi bir referans kitabı bir inç kalınlığındadır. Bunun nedeni, belgelerin biçimlendirilmesi ve yapılandırılmasının karmaşık bir iş olmasıdır. . . .

Açıkçası JSON daha hızlıdır, ancak okunmasının zor olduğu daha da açıktır. Hız için JSON kullanın, insan etkileşimi olacaksa XML kullanın ve hızı feda edebilirsiniz.


2
Cevabınız yeni bir bilgi getirmiyor ... Ama sanırım bu hala doğru

1

Her türlü yapılandırma, veri değişimi veya mesajlaşma için JSON kullanıyorum. XML'i yalnızca başka nedenlerle veya belge benzeri verileri anlamsal olarak işaretlemem gerektiğinde kullanıyorum.


1

Hem XML hem de JSON Microsoft tarafından desteklenir. XML değişmezleri VB 9'daki yeni harika özellikti. ASP.NET 4.0'ın gelecek sürümünde JSON, istemci tarafı şablonlamasının gücünden yararlanmak için bir zorunluluktur.

Sormuş olduğunuz sorudan, jQuery ile veya jQuery olmadan istemci tarafında işlem yapmak kolay olduğu için JSON sizin için bir seçim olabilir.


1

JSON kullanma

  • Veriler tarayıcıda JavaScript tarafından kullanılacaksa.
  • Veri modeli basittir ve karmaşık değildir (çok fazla bileşik nesne).

XML kullanma

  • Çoğunlukla çeşitli hizmetleri heterojen platformlara ve teknolojilere entegre ettiğiniz bir SOA tür ortamında.
  • SOAP, HTTP dışındaki farklı protokoller üzerinden iletilebilmesi avantajına sahiptir.
  • XSLT, XSL-FO gibi veri modeli dönüştürme aracında kullanımı kolaydır.
  • (XQuery) XML verilerini saklamak / sorgulamak için çok fazla veritabanı desteği.
  • XML çok olgun bir veri biçimidir, bu yüzden aklınıza gelebilecek herhangi bir kullanım durumunu desteklemek için birçok araç bulabilirsiniz.

1

Bu makaleyi dijital pazarda gerçekten ilginç buldum .

Makaleden bazı bölümler aşağıda alıntılanmıştır.

JSON pros hakkında:

Etmek istediğiniz tek şey atomik değerler veya atomik değerlerin listeleri veya karmalarıysa, JSON, XML'in birçok avantajına sahiptir: İnternet üzerinden doğrudan kullanılabilir, çok çeşitli uygulamaları destekler, JSON'u işlemek için programlar yazmak kolaydır, isteğe bağlı birkaç özelliği vardır, insan tarafından okunabilir ve makul derecede açıktır, tasarımı resmi ve özlüdür, JSON belgelerinin oluşturulması kolaydır ve Unicode kullanır. ...

XML artıları hakkında:

XML, yapılandırılmamış verilerin tam zenginliği ile oldukça iyi ilgilenir. Ölümü neşeyle web API tasarımcılarının bir kadrosu tarafından kutlansa bile XML'in geleceği hakkında endişelenmiyorum.

Ve "Sana söylemiştim!" masamda bir token. Ben daha zengin API geliştirmek istendiğinde JSON millet ne yaptığını görmek için sabırsızlanıyoruz. Daha az iyi yapılandırılmış veri alışverişi yapmak istediklerinde, JSON'a çekecekler mi? JSON için zaman zaman bir şema dilinden bahsediyorum, diğer diller takip edecek mi? ...


Bu cevap ve alıntılar, alıntı yapılan makalenin tenonunu tamamen yanlış temsil ediyordu, bu da JSON'u şiddetle destekliyor. Alıntılar, makalenin yazarının katılmadığı üçüncü bir tarafa aittir. Atıfta bulunulan makale çok iyi bir okumadır - bu nedenle, yanlış temsil edilmesine rağmen bu cevaba ilişkin herhangi bir aşağı oy yoktur.
Lawrence Dol

1

Hızlı kurallar:

  • JSON: programdan programa veri biçimi
  • YAML (JSON superset): programdan insana veri formatı
  • XML: belge biçimlendirme biçimi

Açıklama:

JSON'un tek rolü, çoğu programlama dilinde yaygın olan veri türlerini kullanarak nesneye yönelik verileri serileştirmektir: listeler , karmalar ve skalerler ve bu amaçla gerçekten yenilmez veya geliştirilemez. "JSON'un sürüm numarası yoktur [olarak] JSON dilbilgisinde herhangi bir değişiklik yapılması beklenmemektedir". - Douglas Crockford (Bunu mükemmel bir şekilde yaptığının işareti olarak yenemezsin)

XML bir zamanlar veri değiştirme formatı olarak satıldı, ancak en yaygın iki kullanım durumunu göz önünde bulundurun: Eşzamansız istemci-sunucu iletişimi (AJAX) - JSON, XML'in yerini tamamen aldı (X gerçekten bir J olmalı) ve web hizmetleri : JSON, XML'i yedek bir alternatif haline getirdi.

XML için yaygın olarak kullanılan bir başka şey de, programlar için insan yazılabilir / okunabilir (?) Veri dosyalarıydı, ancak burada da bir JSON süper kümesi olan YAML'de daha özlü, daha program dostu, daha insan dostu bir biçime sahipsiniz.

Veri temsili için JSON, XML'i her yerde yener. XML için geriye ne kaldı? Amaçlanan karışık içerikli belge gösterimi .


0

Çoğu yeni web teknolojisi JSON kullanarak çalışır, bu yüzden JSON kullanmak için kesinlikle iyi bir neden. Büyük bir avantaj, XML'de aynı bilgileri birden çok farklı şekilde temsil edebilmenizdir, bu da JSON'da daha basittir.

Ayrıca JSON IMHO, XML'den çok daha net, bu da benim için net bir avantaj sağlıyor. .NET ile çalışıyorsanız, Json.NET JSON ile çalışmanıza yardımcı olacak açık bir kazanandır.

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.