YAML ve JSON arasındaki fark nedir?


735

Özellikle aşağıdakileri dikkate alarak YAML ve JSON arasındaki farklar nelerdir?

  • Performans (kodlama / kod çözme süresi)
  • Bellek tüketimi
  • İfade netliği
  • Kütüphane kullanılabilirliği, kullanım kolaylığı (C'yi tercih ederim)

Yapılandırma dosyalarını saklamak için gömülü sistemimizde bu ikisinden birini kullanmayı planlıyordum.

İlişkili:

Perl verilerimi saklamak için YAML veya JSON kullanmalı mıyım?


26
JSON'un bir YAML alt kümesi olarak kabul edilebileceğini unutmayın: en.wikipedia.org/wiki/JSON#YAML
Charles

2
@Charles, evet, ama bazı ince farkları var: ajaxian.com/archives/json-yaml-its-getting-closer-to-truth
pierrotlefou

1
YAML'nin (yaklaşık olarak) bir JSON üst kümesi olduğundan, performans sorunu, bu ifadeyi kullanıp kullanamayacağınız varsayımı olmadan cevaplanamaz. İhtiyacınız yoksa: YAML ayrıştırıcıları JSON okumada ne kadar hızlı? İhtiyacınız olursa: Aynı fikrin daha uzun bir JSON temsiline izin verdiğinizde JSON ayrıştırıcıları ne kadar yavaştır?
poolie

@jokoon "C kütüphanesini tercih ederim" (örneğin libyaml)
dbr

4
YAML belgeleri karmaşık ve okunması zor olabilir . YAML ile "Milyar gülüyor" saldırısı mümkündür. Öte yandan, karmaşık nesneler, grafikler ve diğer yapılar YAML'de verimli bir şekilde serileştirilebilir. Değişim biçimleri ve basit yapılar için JSON tercih edilir. Karmaşık nesne serileştirme veya dilbilgisi tanımları için YAML tercih edilebilir.
Erik Aronesty

Yanıtlar:


656

Teknik olarak YAML, JSON'un bir üst kümesidir. Bu, en azından teoride, bir YAML ayrıştırıcısının JSON'u anlayabileceği, ancak tam tersi olmadığı anlamına gelir.

"YAML: JSON ile İlişki" başlıklı bölümdeki resmi özelliklere bakın .

Genel olarak, YAML hakkında sevdiğim ve JSON'da bulunmayan bazı şeyler var.

  • @Jdupont'un işaret ettiği gibi, YAML'ye bakmak görsel olarak daha kolaydır. Aslında YAML ana sayfasının kendisi geçerli YAML'dir, ancak bir insanın okuması kolaydır.
  • YAML, "çapalar" kullanarak YAML dosyasındaki diğer öğelere başvuruda bulunabilir. Böylece ilişkisel bilgileri bir MySQL veritabanında bulabileceği gibi işleyebilir.
  • YAML diğer seri hale Böyle JSON gibi biçimlerin veya XML gömme hakkında daha sağlamdır içinde bir YAML dosyası.

Pratikte bu son iki noktanın hiçbiri sizin veya benim yaptığım şeyler için önemli olmayacaktır, ancak uzun vadede YAML'nin daha sağlam ve uygulanabilir bir veri serileştirme formatı olacağını düşünüyorum.

Şu anda AJAX ve diğer web teknolojileri JSON kullanma eğilimindedir. YAML şu anda çevrimdışı veri işlemleri için daha fazla kullanılıyor. Örneğin, varsayılan olarak C tabanlı OpenCV bilgisayar görme paketine dahil edilirken JSON dahil değildir.

Hem JSON hem de YAML için C kütüphaneleri bulacaksınız. YAML'in kütüphaneleri daha yeni olma eğilimindedir, ancak geçmişte onlarla hiçbir sorunum olmadı. Bkz. Örneğin Yaml-cpp .


199
json bir alt küme değildir (yakın olmasına rağmen) ve onları şifrelediğinizde uyumsuzluklar çıldırır. json kütüphaneleri genellikle daha hızlıdır ... ( stackoverflow.com/questions/2451732/… ). yaml destekçileri bunun bir alt küme olması konusunda ısrar edecektir. okunabilirlik önemliyse yaml kullanın. birlikte çalışabilirlik ve hız önemliyse, JSON kullanın.
Erik Aronesty

6
YAML, belirli bir JSON sözdizimi biçiminin üst kümesidir. Yani, JSON'u YAML ile uyumlu bir şekilde kullanırsanız, uygun bir alt kümedir. Pierr'ın yukarıda yorumladığı gibi, özellikler [uyumluluğa yöneliktir] (ajaxian.com/archives/json-yaml-its-getting-closer-to-truth).
naught101

120
Ayrıca YAML kullanışlı yorumları destekler.
Den

59
@ErikAronesty JSON, YAML 1.1'in bir alt kümesine yakındı, ancak YAML 1.2'den beri artık gerçek bir alt kümedir. YAML 1.2 öncelikle iki spesifikasyon arasındaki son birkaç uyumsuzluğu gidermek için piyasaya sürüldü.
00prometheus

64
Gönderen YAML 1.2 spec : "Bu revizyon temel amacı resmi alt kümesi olarak JSON uygun hale YAML getirmektir."
Zengin C

204

farklılıklar:

  1. YAML, nasıl kullandığınıza bağlı olarak, JSON'dan daha okunabilir olabilir
  2. JSON genellikle daha hızlıdır ve muhtemelen daha fazla sistemle birlikte çalışabilir
  3. Çok hızlı bir şekilde "yeterince iyi" JSON ayrıştırıcı yazmak mümkün
  4. Potansiyel olarak geçerli JSON olan yinelenen anahtarlar kesinlikle geçersiz YAML'dir.
  5. YAML, yorumlar ve ilişkisel çapalar da dahil olmak üzere bir dizi özelliğe sahiptir. Dolayısıyla YAML sözdizimi oldukça karmaşıktır ve anlaşılması zor olabilir.
  6. {a: &b [*b]}Bazı dönüştürücülerde sonsuz döngü yapacak olan yaml: 'da özyinelemeli yapılar yazmak mümkündür . Dairesel tespit ile bile, bir "yaml bombası" hala mümkündür (bkz. Xml bombası ).
  7. Referans olmadığı için, karmaşık yapıları JSON'da nesne referanslarıyla serileştirmek imkansızdır. Bu nedenle YAML serileştirmesi daha verimli olabilir.
  8. Bazı kodlama ortamlarında, YAML kullanımı bir saldırganın rasgele kod yürütmesine izin verebilir .

Gözlemler:

  1. Python programcıları, seviyeleri belirtmek için parantezli sözdizimi yerine girintinin kullanımı nedeniyle genellikle YAML'nin büyük hayranlarıdır.
  2. Birçok programcı, girintiye "anlam" ın bağlılığını kötü bir seçim olarak görmektedir.
  3. Veri formatı bir uygulamanın ortamından ayrılacaksa, bir kullanıcı arayüzünde ayrıştırılacaksa veya bir mesajlaşma katmanında gönderilecekse, JSON daha iyi bir seçim olabilir.
  4. YAML, doğrudan dilbilgisi tanımları gibi karmaşık görevler için kullanılabilir ve genellikle yeni bir dil icat etmekten daha iyi bir seçimdir.

9
Bu. Yaml 1.2'nin tüm amacı, JSON'u katı bir alt küme yapmak için birkaç uyumluluk farkını çözmekti. Spesifikasyonun amacına ulaşmadığına inanıyorsanız, Erik, lütfen YAML spesifikasyonunu ihlal eden ve / veya doğrulanmış 1.2 uyumlu bir YAML ayrıştırıcısını kıran geçerli bir JSON örneğine işaret edin.
SFEley

32
@SFEley YAML Spec, geçersiz YAML olabilecek potansiyel olarak geçerli JSON dosyaları olduğunu söylüyor. Ancak gerçek kullanımda olması muhtemel değildir. "JSON'un RFC4627'si, eşleme anahtarlarının yalnızca" OMUZ "un benzersiz olmasını gerektirirken, YAML onların" ZORUNLU "olmaları konusunda ısrar ediyor. Teknik olarak, YAML, yinelemeleri bir hata olarak ele almayı seçerek JSON spesifikasyonuna uyuyor. Pratikte, JSON bu tür kopyaların anlambilimi, tek taşınabilir JSON dosyaları benzersiz anahtarlara sahip olanlardır, bu nedenle geçerli YAML dosyalarıdır. " - yaml.org/spec/1.2/spec.html#id2759572
David

9
Girintinin kullanımı hakkında yorum yapmak; bunun alışkın olmasını gerektirebileceğine inanıyorum ve herkes bunu istemez. Örneğin, ben bir .NET adamıyım. Bir travis.yml dosyasına bakıyordum ve neden bir sorun olduğunu merak ediyordum. Olmaması gereken bir sekme olduğunu öğrendim. Herkes boşluk / sekme / yeni satır tercihleri ​​nedeniyle patlayan şeylere alışık değildir.
Phil

10
Sekmelere girintili karakterler olarak izin verilmez. IMHO, sözdizimsel girinti olsun veya olmasın, tüm dillerde iyi kodlama tarzıdır.
00prometheus

6
@Wyrmwood Ben şahsen python ve YAML seviyorum ve kelimenin tam anlamıyla her gün kullanıyorum. Ben insanların sık sık düzenlemek zorunda şeyler için YAML ve insanların "bakmak" gerekebilir şeyler için JSON kullanma eğilimindedir. Özellikle birden fazla seviye veya daha uzun fonksiyon blokları varsa, girintiyi kafa karıştırıcı olan bulan C ++ geliştiricileri tarafından geçerli eleştirilere maruz kaldım. Tabii ki ... iyi test edilebilir kod bu şeylere sahip değildir, bu yüzden genellikle bir sorun değildir. Bu benim kişisel gözlemim, ancak herhangi bir sıradan google araması birçok sonuç verecektir ... bu yüzden doğrulamak önemsizdir.
Erik Aronesty

89

Ezoterik teoriyi atlamak

Bu, en çok benim gibi google'da bir arama sonucundan başlığı okumak gibi ayrıntılara değil, başlığa cevap veriyor, bu yüzden bir web geliştirici bakış açısından açıklamanın gerekli olduğunu düşündüm .

  1. YAML, Python geliştiricileri için tanıdık bir alan olan boşluk girintisini kullanır.
  2. JavaScript geliştiricileri JSON'u sever, çünkü JavaScript'in bir alt kümesidir ve JSON'u bildirmek için kestirme bir yolla birlikte doğrudan JavaScript içinde yorumlanabilir ve yazılabilir; boşluklar olmadan tipik değişken adları kullanılırken anahtarlarda çift tırnak kullanılmasına gerek yoktur.
  3. Hem YAML hem de JSON için tüm dillerde çok iyi çalışan çok sayıda ayrıştırıcı vardır.
  4. YAML'nin alan formatına bakmak birçok durumda daha kolay olabilir, çünkü formatlama daha insan tarafından okunabilir bir yaklaşım gerektirir.
  5. YAML'ın formunu daha kompakt ve bakması daha kolayken düzenleyicinizde görünür alan biçimlendirmeniz yoksa elle düzenlemek aldatıcı şekilde zor olabilir. Sekmeler boşluk değildir, bu nedenle tuş vuruşlarınızı boşluklara yorumlayacak bir düzenleyiciniz yoksa daha fazla kafa karıştırır.
  6. JSON, kontrol edilmesi YAML'den çok daha az özellik nedeniyle serileştirmek ve serileştirmeyi kaldırmak için çok daha hızlıdır, bu da daha küçük ve daha hafif kodun JSON'u işlemesini sağlar.
  7. Yaygın bir yanlış anlama , YAML'nin daha az noktalama işaretine ihtiyaç duyması ve JSON'dan daha kompakt olmasıdır, ancak bu tamamen yanlıştır. Boşluk görünmezdir, bu nedenle daha az karakter varmış gibi görünür, ancak YAML'nin doğru girintiyle birlikte doğru şekilde yorumlanması için gereken gerçek boşlukları sayarsanız, YAML'nin aslında JSON'dan daha fazla karakter gerektirdiğini göreceksiniz. JSON, hiyerarşiyi veya gruplandırmayı temsil etmek için boşluk kullanmaz ve daha kompakt taşıma için gereksiz boşluk kaldırılarak kolayca düzleştirilebilir.

Odadaki Fil: İnternetin kendisi

JavaScript çok büyük bir farkla web'e açıkça hakimdir ve JavaScript geliştiricileri, popüler web API'leriyle birlikte ezici bir şekilde veri formatı olarak JSON'u kullanmayı tercih eder, böylece genel olarak web programlaması yaparken JSON üzerinden YAML kullanmanın tartışılması zorlaşır. bir ekip ortamında. Aslında, web programcılarının çoğu YAML'nin var olduğunu bile bilmiyorlar.

Herhangi bir web programlama yapıyorsanız, JavaScript ile çalışırken çeviri adımı gerekmediğinden JSON varsayılan yoludur, bu durumda YAML'yi JSON üzerinde kullanmak için daha iyi bir argüman bulmalısınız.


10
Python geliştiricilerinin YAML'yi tercih ettiklerine katılmıyorum. Pythons dict temelde JSON, dikte listesi de temelde JSON. Python, json lib'de derlenmiştir. Bir yan notta ben bir python geliştirici ve JSON tercih (biliyorum python geliştiricileri çoğu JSON tercih).
karantan

6
Beyaz boşluk hakkında beni gerçekten rahatsız eden tek şey, karıştırılmasının ve girintilemek veya yanlış girmemek gibi yanlış anlamanın ne kadar kolay olduğudur. bir rehber kuralı var. onun gizli ayy gibi bu gerçekten kimseyi düzenlerken söylediği o kolay tip senaryo değil. json ile bu sorunu hiç yaşamadım.
Jason Sebring

6
@JasonSebring. Neredeyse YAML'nin neden boşluklarla gittiğini merak ediyordunuz. YAML'in ilk 'okyanusa batması' kırık bir uygulamaya yol açtı ... hepsi boşluklar yüzünden. Belki de matbaa dışı karakter kullanmayan bir girinti kullanmanın çok daha mantıklı olacağını düşünürdünüz! (Yani, neden '' yerine '' '' seçmediler?) YAML'yi anlamak için spesifikasyonlara gitmelisin. JSON'u anlamak için buna gerek yok. (Ben eskisine gittim, ikincisine hiç gitmedim). Bu bana gerçekten 'insan tarafından okunabilir' olmayan bir biçimi gösterir
cmroanirgo

7
@cmroanirgo yah bu benim deneyimimdi. Patronum YAML'yi JSON üzerinde kullanmaya zorladı ve işleri düzenlemek ve yutmak gereksiz yere berbat hale getirdi. Bunu, oyları umduğumu umduğum için yazdım.
Jason Sebring

3
YAML içindeki sekmelerle ilgili sorun, (a) hata mesajını okumama ve (b) sekmeleri vurgulamayan bir düzenleyiciye sahip olmak anlamına gelir. Her iki problem de kolayca düzeltilebilir, bu yüzden şikayetleri anlamıyorum.
aracı

38

Bu soru 6 yaşında, ama garip bir şekilde, cevapların hiçbiri gerçekten dört noktayı (hız, bellek, ifade, taşınabilirlik) ele almıyor.

hız

Açıkçası bu uygulamaya bağlıdır, ancak JSON çok yaygın olarak kullanıldığı ve uygulanması çok kolay olduğu için daha fazla yerel destek ve dolayısıyla hız alma eğilimindedir. YAML'nin JSON'un yaptığı her şeyi ve bir kamyon yükünü daha fazla yaptığı göz önüne alındığında, muhtemelen her ikisinin karşılaştırılabilir uygulamalarından biri olan JSON'un daha hızlı olacağı düşünülmektedir.

Ancak, YAML dosyasının JSON emsaline göre (nedeniyle daha az biraz daha küçük olabilir verilen "ve ,karakterler), bu kadar mümkün oldukça optimize YAML ayrıştırıcı istisnai durumlarda daha çabuk olabileceğini.

Hafıza

Temel olarak aynı argüman geçerlidir. Aynı veri yapısını temsil ediyorlarsa, bir YAML ayrıştırıcısının neden bir JSON ayrıştırıcısından daha fazla bellek verimli olacağını görmek zor.

Etkileyicilik

Diğerleri tarafından belirtildiği gibi, Python programcıları YAML, JavaScript programcılarını JSON'a tercih etme eğilimindedir. Bu gözlemleri yapacağım:

  • JSON'un tüm sözdizimini ezberlemek kolaydır ve bu nedenle herhangi bir JSON dosyasının anlamını anlama konusunda çok emin olun. YAML hiçbir insan tarafından gerçekten anlaşılamaz. İnceliklerin ve uç vakaların sayısı aşırıdır.
  • Spesifikasyonu az sayıda çözümleyici uyguladığından, belirli bir bağlamda belirli bir ifadenin anlamından emin olmak daha da zordur.
  • JSON'da yorum eksikliği, pratikte gerçek bir acıdır.

taşınabilirlik

JSON kütüphanesi olmadan modern bir dil hayal etmek zor. Tam özellikten daha az bir şey uygulayan bir JSON ayrıştırıcısını hayal etmek de zordur. YAML yaygın bir desteğe sahiptir, ancak JSON'dan daha az yaygındır ve her ayrıştırıcı farklı bir alt küme uygular. Bu nedenle YAML dosyaları düşündüğünüzden daha az birlikte çalışabilir.

özet

JSON performans (ilgili ise) ve birlikte çalışabilirlik kazanır. YAML, insan tarafından tutulan dosyalar için daha iyidir. HJSON , çok daha az taşınabilirliğe rağmen iyi bir uzlaşmadır. JSON5 , iyi tanımlanmış bir sözdizimi ile daha makul bir uzlaşmadır.


3
Aslında YAML'ın beni böyle kandıracak görünmez karakterler yüzünden daha küçük olduğunu düşündüm. Görünmez => Orada değil, aslında değil. Orada olmak zorunda görünmez karakterleri sayarsanız, özellikle YAML daha büyük iç içe geçtikçe, JSON'u hızla aşar. Ben sadece JSON ve YAML'yi düzleştirebileceğinizden çok düşünmeden, insan tarafından okunabilir bölümün çoğunu bu düşünceye aldattığından çok ilginç olduğunu düşündüm. Ayrıca, YAML'ın elle düzenlenmesi, okunması çok zor olduğunu gördüm, sadece düzenleyici kılavuzlarına ihtiyacınız olduğu gibi düzenleyin, zaman zaman iç içe öğeleri kolayca yanlış yönlendirin.
Jason Sebring

1
Buradaki yanıtların hiçbirinin bunu açıkça belirtmediğini hissediyorum: "Ayarlar / yapılandırma dosyaları için, YAML daha iyidir (yukarıda belirtilen nedenlerden dolayı). Makine / makine birlikte çalışma için JSON kullanın". Başka bir deyişle: hedef kitleniz bir insansa, YAML daha iyidir. Hedef başka bir programsa (ancak yine de verilerin okunabilir olmasını istiyorsanız) JSON'u kullanın.
Florin T.

Bu doğru, ancak soru, ikisinin nasıl karşılaştırılmasını istedikleri hakkında oldukça spesifik parametreler ortaya koydu. Şahsen ben asla hiçbir şey için YAML kullanmam. Birlikte çalışabilirlik için JSON veya insan bakımı önemliyse JSON6 kullanırdım.
Steve Bennett

29

GIT ve YAML

Diğer cevaplar iyi. Önce bunları okuyun. Ama bazen YAML kullanmak için bir neden daha ekleyeceğim: git .

Giderek, birçok programlama projesi dağıtım ve arşivleme için git depolarını kullanmaktadır. Ve git repo'nun geçmişi JSON ve YAML dosyalarını eşit olarak depolayabilirken, bir dosyadaki değişiklikleri izlemek ve görüntülemek için kullanılan "diff" yöntemi satır yönelimlidir. YAML çizgi odaklı olmaya zorlandığından, YAML dosyasındaki küçük değişikliklerin bir insan tarafından görülmesi daha kolaydır.

Elbette, JSON dosyalarının dizeleri / anahtarları sıralayarak ve girinti ekleyerek "güzelleştirilebileceği" doğrudur. Ama bu varsayılan değil ve tembelim.

Şahsen ben sistemden sisteme etkileşim için genellikle JSON kullanıyorum. Sık sık yapılandırma dosyaları, statik dosyalar ve izlenen dosyalar için YAML kullanıyorum. (Genellikle YAML ilişkisel çapaları eklemekten de kaçınırım. Hayat, döngüler avlamak için çok kısa.)

Ayrıca, hız ve alan gerçekten bir endişe ise, ben de kullanmıyorum. BSON'a bakmak isteyebilirsiniz.


22

YAML'yi gözler için daha kolay buluyorum: daha az parantez, "" vb. YAML'de sekmelerin sıkıntısı olmasına rağmen ... biri asılıyor.

Performans / kaynaklar açısından, ikisi arasında büyük farklılıklar beklemem.

Ayrıca, yapılandırma dosyaları hakkında konuşuyoruz ve bu yüzden yüksek bir kodlama / kod çözme etkinliği sıklığı beklemezdim, değil mi?


22
Sekmelerin sıkıntısıyla ne demek istediğini merak ettim . Bir şey sekme karakterleri, kişisel olarak herhangi bir kaynak dosyada iyi bir fikir olduğunu düşünüyorum yaml izin verilmiyor inanıyorum .
poolie

6
@poolie: jldupont muhtemelen YAML'deki sözdizimsel olarak önemli önde gelen boşluktan bahsediyor .
naught101

10
Tamam ama sekme değiller.
poolie

20

YAML'nin sahip olduğu ve JSON'un sahip olmadığı herhangi bir özelliğe ihtiyacınız yoksa, JSON'u tercih ederim çünkü çok basit ve yaygın olarak desteklenmektedir (birçok dilde çok fazla kütüphaneye sahiptir). YAML daha karmaşıktır ve daha az desteğe sahiptir. Ayrıştırma hızının veya bellek kullanımının çok farklı olacağını düşünmüyorum ve belki de programınızın performansının büyük bir kısmı olmayabilir.


3
YAML hangi açıdan daha karmaşık?
Accatyyc

18
Örneğin, YAML başka bir cevapta belirtildiği gibi çapaları destekler. Genişletilebilir veri türleri gibi başka özellikler de vardır. Bu ayrıştırmayı daha karmaşık hale getirir ve YAML'nin neden daha büyük özelliklere sahip olduğunu açıklar. Ayrıştırıcı uygulamasına bağlı olarak performansa zarar verebilir (şu soruya göz atın: stackoverflow.com/questions/2451732/… ).
Anton Strogonoff

5
Karmaşıklık, genel olarak daha fazla basitlik elde etmek için güç satın alırsa, basitlikten daha iyidir. Veri modelinizin karmaşıklığına bağlı olarak bu kesinlikle doğrudur.
Jonathan Neufeld

3
Burada biraz geç kalabilirim ama YAML yorum ekleyebilir, oysa JSON yapamaz. Spesifikasyonların belgelendirilmesi söz konusu olduğunda bana çok yardımcı oluyor
Moses Liao GZ

@Accatyyc. İnsanların burada fark hakkında soru sormaları gerçeğinin YAML'nin o kadar kolay olmadığını gösteren kesin bir işaret olduğunu düşünüyorum. Ben ettik asla ( "? Neden ben de bir yorum olamaz" hariç) JSON hakkında bir soru sordu
cmroanirgo

15

Teknik olarak YAML daha bir sürü sunuyor JSON (YAML v1.2 JSON bir üst kümesidir):

  • yorumlar
  • çapa ve miras - 3 özdeş öğeye örnek:

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

Zaman İnsanların çoğu bu ekstra özellikleri kullanmak olmayacak ve temel fark olmasıdır YAML girinti kullanır iken JSON parantez kullanır . Bu, YAML'yi daha özlü ve okunabilir hale getirir (eğitimli göz için).

Hangisini seçmeli?

  • YAML ekstra özellikleri ve kısa gösterimi, yapılandırma dosyaları (kullanıcı tarafından sağlanan dosyalar) için iyi bir seçimdir .
  • JSON sınırlı özellikleri, geniş desteği ve daha hızlı ayrıştırma özelliği, birlikte çalışabilirlik ve kullanıcı tarafından sağlanan veriler için mükemmel bir seçimdir .

4

Bu soru artık YAML ve JSON'u ararken belirgin bir şekilde öne çıktığı için, ikisi arasında nadiren belirtilen bir farkı belirtmeye değer: lisans. JSON , JSON kullanıcılarının uyması gereken bir lisansa sahip olduğunu iddia eder (yasal olarak belirsiz "kötülük için değil" iyilik için kullanılacaktır "). YAML böyle bir lisans iddiası taşımamaktadır ve bu önemli bir fark olabilir (sizin için değilse, avukatınıza).


JSON kullanmıyorum, JSON'u çağırmadan JSON'un tam eşdeğerini kullanıyorum. Ben buna PS-OFF diyorum. Beni kullandığım için dava edeceksin { "": #, [] }???
Andrew

4

Bazen birinden diğerine karar vermek zorunda kalmazsınız.

Örneğin Go'da her ikisine de aynı anda sahip olabilirsiniz:

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}

3

Gönderen: Arnaud Lauret “Web API'lerinin Tasarımı” Kitabı. :

JSON veri biçimi

JSON , JavaScript programlama dilinin verileri nasıl tanımladığına dayanan bir metin veri biçimidir, ancak adına rağmen tamamen dilden bağımsızdır (bkz. Https://www.json.org/ ). JSON kullanarak , sıralanmamış ad / değer çiftlerini içeren nesneleri ve ayrıca bu şekilde gösterildiği gibi sıralı değerleri içeren dizileri veya listeleri tanımlayabilirsiniz.

resim açıklamasını buraya girin

Bir nesne kıvırcık ayraçlarla ({}) sınırlandırılmıştır. Ad, tırnak içine alınmış bir dizedir ("ad") ve değerinden iki nokta üst üste (:) ile ayrılır. Değer, "değer" gibi bir dize, 1.23 gibi bir sayı, bir Boole (doğru veya yanlış), null değeri null, bir nesne veya bir dizi olabilir. Bir dizi parantez ([]) ile ayrılır ve değerleri virgül (,) ile ayrılır. JSON formatında kolayca herhangi bir programlama dili kullanılarak ayrıştırılır. Ayrıca okumak ve yazmak nispeten kolaydır. Veritabanları, yapılandırma dosyaları ve elbette API'lar gibi birçok kullanım için yaygın olarak benimsenmiştir.

YAML

YAML (YAML Biçimlendirme Dili Değil), insan dostu bir veri serileştirme biçimidir. JSON gibi YAML ( http://yaml.org ) bir anahtar / değer veri biçimidir. Şekil, ikisinin karşılaştırmasını göstermektedir.

resim açıklamasını buraya girin

Aşağıdaki noktalara dikkat edin:

  • YAML içindeki özellik adları ve değerleri çevresinde çift tırnak ("") yoktur .

  • Json en yapısal küme ayraçları ({}) ve virgül (,) içinde yeni satır ve girinti ile değiştirilir YAML .

  • Ve yeni satır (-) Dizi parantez ([]) ve virgül (,) yerine çizgiler YAML .

  • Aksine JSON , YAML bir karma işareti (#) ile başlayan bir yorum sağlar. Bu formatlardan birini diğerine dönüştürmek nispeten kolaydır. Bir dönüştürürken olsa Forewarned, yorum kaybedecek YAML belgeyi JSON .


0

Hem YAML hem de JSON'un çok etkili olduğunu düşünüyorum. Biri benim için diğeri üzerinde kullanıldığında gerçekten dikte eden tek şey, dilin en popüler şekilde kullanıldığı şeydir. Örneğin, Java, Javascript kullanıyorsanız JSON kullanacağım. Java için, hemen hemen JSON olan ancak bazı özelliklerden yoksun olan kendi nesnelerini kullanacağım ve ilk etapta JSON'da yapmam gerekiyorsa bunu JSON'a dönüştüreceğim. Bunu yapıyorum, çünkü bu Java'da yaygın bir şeydir ve diğer Java geliştiricilerinin kodumu değiştirmesini kolaylaştırır. İkinci şey, özellikleri hatırlamak için program için mi kullanıyorum yoksa program bir yapılandırma dosyası şeklinde talimatlar alıyorsa, bu durumda YAML kullanacağım, çünkü çok kolay insan okuması, güzel sözdizimi görünümlü ve değiştirmek çok kolay, YAML'ın nasıl çalıştığı hakkında hiçbir fikriniz olmasa bile. Ardından, program onu ​​okuyacak ve JSON'a ya da o dil için tercih edilen her şeye dönüştürecektir.

Sonunda, dürüstçe önemli değil. Hem JSON hem de YAML deneyimli bir programcı tarafından kolayca okunabilir.


-1
  • JSON, yml'yi karşılaştıran büyük verileri işleyemez

  • Farklı multimedya formatlarını işlemek için uygun değildir.

  • JSON'un 'yorumları' destekleyecek bir özelliği yoktur. Bu yalnızca ek bir özellik olarak dahil edilebilir.

  • YAML, JSON'a göre kendine referans, karmaşık veri türleri için destek, gömülü blok değişmezleri, yorumlar ve daha fazlası gibi bazı avantajlara sahiptir.

  • JSON yalnızca okunabilirken, YAML düzenlenebilir olduğu kadar okunabilir de olabilir.
  • JSON, YAML'nin bir alt kümesidir, böylece YAML ayrıştırıcıları JSON'u ayrıştırabilir.
  • YAML ekstra sınırlayıcı kullanmaz, bu nedenle XML ve JSON'dan daha hafiftir.

"Büyük veri" ve "yalnızca okunabilir" noktalarda ne demek istiyorsun? JSON bir veri biçimidir, soyut bir kavramın bu iki sınırlaması neler olabilir?
João Farias

4
@ JoãoFarias Diyelim ki 1GB JSON dosyanız ve 1GB CSV dosyanız var ve 256MB belleğiniz var. CSV dosyasını satır satır işleyebilirsiniz, JSON ile bu mümkün değildir. YAML dosyasını satır satır ayrıştırmak, JSON'un ayrıştırılmasından daha kolay olabilir.
NeverEndingQueue
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.