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.