Acho que um grande benefício do JSON sobre XML é que não preciso decidir como formatar os dados. Como alguns demonstraram, existem inúmeras maneiras de criar estruturas de dados simples em XML - como elementos, como valores de atributos etc. Então você precisa documentá-lo, escrever XML Schema ou Relax NG ou alguma outra porcaria ... uma bagunça.
O XML pode ter seus méritos, mas para o intercâmbio básico de dados, o JSON é muito mais compacto e direto. Como desenvolvedor de Python, não há incompatibilidade de impedância entre os tipos de dados simples no JSON e no Python. Portanto, se eu estivesse escrevendo um manipulador do lado do servidor para uma consulta AJAX que perguntasse sobre as condições de neve de um resort de esqui em particular, criaria um dicionário da seguinte maneira:
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
Quando traduzida através do JSON (usando uma biblioteca como 'simplejson' para Python), a estrutura JSON resultante parece quase idêntica (exceto no JSON, os booleanos são minúsculos).
A decodificação dessa estrutura requer apenas um analisador JSON, seja para Javascript ou Objective-C para um aplicativo nativo do iPhone ou C # ou um cliente Python. Os carros alegóricos seriam interpretados como carros alegóricos, as cadeias como cadeias e os booleanos como booleanos. Usando a biblioteca 'simplejson' em Python, uma simplejson.loads(some_json_string)
declaração me devolveria uma estrutura de dados completa, como acabei de criar no exemplo acima.
Se eu escrevesse XML, teria que decidir se faria elementos ou atributos. Ambos os seguintes são válidos:
<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>
Portanto, não apenas tenho que pensar nos dados que posso enviar para o cliente, mas também em como formatá-los. O XML, embora seja mais simples que o SGML simples por ser mais rigoroso com suas regras, ainda oferece muitas maneiras de pensar sobre esses dados. Então eu teria que continuar gerando. Eu não poderia simplesmente pegar um dicionário Python (ou outra estrutura de dados simples) e dizer "vá se transformar no meu XML". Não pude receber um documento XML e dizer imediatamente "vá se transformar em objetos e estruturas de dados" sem escrever um analisador personalizado ou sem exigir a sobrecarga adicional do XML Schema / Relax NG e de outros problemas.
A questão é que é muito mais fácil e muito mais direto codificar e decodificar dados para JSON, especialmente para trocas rápidas. Isso pode se aplicar mais a pessoas provenientes de uma linguagem dinâmica, pois os tipos de dados básicos (listas, dicionários etc.) incorporados ao JavaScript / JSON são diretamente mapeados para os mesmos tipos de dados ou similares em Python, Perl, Ruby, etc.