Quando preferir JSON sobre XML?

148

Meu requisito é apenas exibir um conjunto de valores recuperados do banco de dados em uma propagação. Eu estou usando jquery.

sarego
fonte

Respostas:

149

Favorecer XML sobre JSON quando alguma dessas opções for verdadeira:

  • Você precisa de validação de mensagem
  • Você está usando XSLT
  • Suas mensagens incluem muito texto marcado
  • Você precisa interoperar com ambientes que não suportam JSON

Favorie JSON sobre XML quando tudo isso for verdadeiro:

  • As mensagens não precisam ser validadas ou a validação de sua desserialização é simples
  • Você não está transformando mensagens, ou transformar sua desserialização é simples
  • Suas mensagens são principalmente dados, não texto marcado
  • Os pontos de extremidade do sistema de mensagens possuem boas ferramentas JSON
Robert Rossney
fonte
9
O JSON não oferece nenhuma vantagem sobre o XML no tratamento de texto marcado. Mas entendo o seu ponto; isso talvez seja exagerado.
Robert Rossney
10
Quando todas as condições forem iguais, defina o JSON por dois motivos: JSON é muito mais fácil de analisar do que XML (compatível com a CPU) e requer muito menos dados a serem transferidos (compatível com a Rede).
Roger Barreto
Quando você usaria XSLT e não XML? XML é um dado, se você já estiver usando XSLT. Isso não deveria estar apoiando o argumento para usar XML. É como dizer usar JSON se você estiver usando JSON.parse (). Além disso, eu argumentaria que é mais fácil transformar um objeto JSON do que escrever uma transformação XSLT, mas esse pode ser meu viés pessoal.
Spencer
Não concordo totalmente com a parte de validação no JSON. JSON também é validável. Verifique este projecto de IETF: ligação É um projecto, mas ainda ..
SOTN
@sotn Você não possui PL / SQL para JSON como possui XML (por exemplo, XQuery). É base para alguns NoSQL DB (existir, MarkLogic Server, EMC Documentum xDB, Basex, Zorba)
Dmytro Melnychuk
81

Uso JSON, a menos que seja necessário usar XML. É mais simples de entender e (porque requer menos sobrecarga de configuração) é mais fácil programar para leitura e gravação se as bibliotecas estiverem disponíveis no seu contexto, e elas são bastante onipresentes agora.

Quando a Amazon expôs seus catálogos como um serviço da Web, eles ofereceram JSON e XML. Algo como 90% dos implementadores escolheu o JSON.

dkretz
fonte
56
"Eu uso JSON, a menos que seja necessário usar XML." ~ Exatamente.
EndangeredMassa
2
Portanto, a pergunta mais profunda é "Por que razões você seria obrigado a usar XML?" Essas razões são idiotas; ou eles apenas refletem preocupações diferentes, de um ponto de vista diferente do seu?
13ren 20/04
5
Várias razões possíveis, incluindo o software existente que não quero reescrever. Mas o mais importante é usar XML como um formato de intercâmbio de dados em que não controlo as duas extremidades, ou existe um padrão formal que se aplica e requer XML. Só posso escolher arbitrariamente quando sou o único desenvolvedor envolvido.
dkretz
15

Considerando o seu caso específico em que você já está fazendo javascript no lado do cliente, eu usaria o JSON pelos seguintes motivos:

  • Como o JSON é nativo do javascript, você teria que escrever menos código no lado do cliente - apenas eval()(ou, melhor ainda JSON.parse()) a string JSON e obter um objeto que você possa usar.

  • Ao mesmo tempo, avaliar o JSON no lado do cliente será mais eficiente e, portanto, mais rápido.

  • A serialização JSON produz seqüências mais curtas que XML. O uso do JSON reduzirá a quantidade de dados em execução no fio e melhorará o desempenho nesse sentido.

Aqui estão algumas leituras adicionais: http://www.subbu.org/blog/2006/08/json-vs-xml

urig
fonte
7
eval()JSON não é um grande não-não?
shoosh 28/11/08
@Shy, próprio site do JSON diz que você pode usar eval em JSON (com parênteses envolvidos em torno): json.org/js.html
strager
9
Retirado de json.org: A função eval é muito rápida. No entanto, ele pode compilar e executar qualquer programa JavaScript, para que haja problemas de segurança. O uso de avaliação é indicado quando a fonte é confiável e competente. É muito mais seguro usar um analisador JSON
Sarego
2
Prefira JSON.parse () a eval ().
Havvy
14

Algumas outras coisas que encontrei no relm XML vs JSON:

JSON é muito bom para

  • pares nome / valor
  • aninhando esses pares

O que significa que tende a gostar de uma matriz ou matriz aninhada. No entanto, o JSON está ausente

  • atributos
  • namespacing

Portanto, se você combinar dois ou mais serviços JSON, poderá haver possíveis conflitos de namespace. Dito isto, o JSON pode ser usado para cerca de 90% das mesmas coisas que o XML pode ser usado ao trocar dados na minha experiência.

nulo
fonte
Outra questão do Json é que você não pode mesclar duas mensagens json facilmente para criar uma nova mensagem json. Ele geralmente não vai ser bem formado ..
vtd-xml-autor
7
Para que você precisaria de atributos? Se o seu elemento contiver outros valores, torne-o um objeto - os membros são seus "atributos". Francamente, acho que a estrutura de atributos / contêineres bifurcais do XML é totalmente prejudicial.
foo
Eu diria que o JSON não possui atributos é um recurso.
Brian
11

Geralmente, o JSON é mais compacto e mais rápido de analisar.

Prefira XML se:

  • Você precisa processar os dados no cliente e pode aproveitar o XSL para isso. É provável que a cadeia XML + XSL funcione mais rápido que o JSON + JavaScript, especialmente para grandes blocos de dados.
    • Um bom caso é converter os dados em um snippet HTML.
  • Vários casos herdados:
    • Existe um serviço XML existente e é um problema reescrevê-lo com JSON por alguns motivos.
    • É necessário postar esses dados de volta como XML após algum processamento leve usando a entrada do usuário.

Um caso importante de (quase) XML: tentar detectar quando enviar trechos de HTML é mais benéfico do que enviar dados brutos. A AHAH pode fazer maravilhas em aplicativos simples, mas frequentemente ignorados. Geralmente, esse estilo pressupõe que um servidor envie fragmentos HTML que serão incorporados na página da Web sem processamento.

Geralmente, nos casos da AHAH, o CSS está sendo aproveitado ao máximo para massagear visualmente os trechos e implementar condições simples, como ocultar / mostrar partes relevantes do trecho, usando configurações específicas do usuário ou específicas do aplicativo.

Eugene Lazutkin
fonte
8

JSON é fácil e rápido de analisar. XML é um pouco mais difícil de analisar e é mais lento para analisar e transferir (na maioria dos casos).

Como você está usando o jQuery, sugiro usar o JSON: o jQuery pode recuperar dados JSON e convertê-los em um objeto Javascript automaticamente. De fato, você pode converter dados JSON em um objeto Javascript usando eval . O XML teria que ser transmitido manualmente por você (não sei como isso funciona em Javascript, mas é difícil / mais irritante na maioria dos idiomas com os quais usei bibliotecas XML).

strager
fonte
1
JSON é, por definição, um objeto JavaScript, o jQuery não está realmente fazendo nada especial de "conversão". Apenas pensei que deveria ser esclarecido.
Brian Gianforcaro 28/11/08
5
JSON não é um objeto javascript, a menos que seja instanciado em javascript. Por acaso, segue o formato usado para serializar objetos javascript, mas é acessível (com os complementos e built-ins adequados) da maioria dos idiomas, pelo menos tão facilmente quanto o XML.
dkretz
@ Gianforcaro, eu percebo isso. Vou editar minha postagem para declarar isso mais claramente. @doofledorfer, eu disse "e converta-o em um objeto Javascript". Eu não disse que os dados JSON eram um objeto Javascript.
Strager 28/11/2008
Ah, desculpe, não entendi.
Strager 28/11/08
8

O JSON é sempre preferível em termos do processamento que o navegador do cliente precisa fazer para analisar os dados. Além disso, o JSON é um formato leve de troca de dados.

A análise de XML sempre consome muitos recursos do navegador e deve ser evitada o máximo que pudermos, a menos que seja necessário.

Tejasvi
fonte
7

Eu tenho um post sobre o assunto detalhando o histórico de protocolos da Web (SOAP, XML, JSON, REST, POX etc.), fornecendo um resumo, bem como algumas vantagens e desvantagens de cada um: http://www.servicestack.net / mythz_blog /? p = 154

Na verdade, acho que você pode desenhar muitas semelhanças entre XML e JSON comparando as diferenças entre as linguagens dinâmica (JSON) e estática (XML).

Basicamente, o XML é um formato de serialização mais rígido e rígido que pode ser opcionalmente verificado com um esquema que o acompanha (que é um XSD ou DTD). Os XSDs são bastante elaborados e permitem que você descreva muitos tipos diferentes, como datas, horas, enumerações, tipos definidos pelo usuário e até mesmo herança de tipos, etc. O SOAP efetivamente se baseia no conjunto de recursos XML, fornecendo uma maneira padronizada de descrever seus serviços da Web ( por exemplo, tipos e operações) através de um WSDL. A verbosidade e a complexidade da especificação WSDL significa que pode ser mais tedioso se desenvolver, mas ao mesmo tempo há muito mais ferramentas disponíveis para você e a maioria das linguagens modernas fornece ferramentas automatizadas para gerar proxies de clientes, tirando parte do fardo. desligado ao tentar interoperar com serviços externos.

Eu ainda recomendaria o uso de XML para seus serviços da Web se você tiver um 'serviço corporativo' bem definido que não esteja sujeito a alterações frequentes ou se precisar acessar o serviço da Web a partir de vários idiomas diferentes.

Por todos os seus benefícios, o XML também traz desvantagens. Ele se baseia em espaços de nome para fornecer um formato extensível digitado e permite especificar atributos e elementos no mesmo documento. Ter espaços de nomes diferentes no documento significa muitas vezes ao usar um Analisador de XML para extrair dados, você também precisará fornecer o espaço de nomes de cada elemento que deseja recuperar / atravessar. Também extrapola a carga útil, tornando-a mais detalhada do que precisa ser. Ter a opção de gerar atributos e elementos significa que suas classes não são mapeadas adequadamente para um documento XML. Somente esses recursos o tornam um ajuste programático inadequado para a maioria dos idiomas, tornando-o mais tedioso e complicado de trabalhar.

O JSON, por outro lado, é o oposto completo do XML de várias maneiras, pois é muito pouco digitado e possui suporte simples para tipos básicos: Number, Bool, string, Objects and Arrays. Todo o resto basicamente tem que caber em uma corda. Isso não é bom ao tentar se comunicar através dos limites do idioma, pois você precisará seguir algumas especificações fora do padrão fora da banda, se desejar oferecer suporte a tipos mais específicos. No lado positivo, seu conjunto limitado de recursos faz um bom ajuste programático para a maioria dos idiomas - e é perfeitamente adequado para JavaScript, pois uma string JSON pode ser avaliada diretamente no objeto JavaScript.

Tamanho e desempenho

Eu tenho alguns benchmarks do banco de dados northwind disponíveis comparando o tamanho e a velocidade entre as implementações Microsofts XML e JSON. Basicamente, o XML é mais do que o dobro do tamanho do JSON, mas, ao mesmo tempo, parece que a Microsoft se esforçou muito para otimizar o XML DataContractSerializer, pois é mais de 30% mais rápido que o JSON. Parece que você precisa fazer uma troca entre tamanho e desempenho. Não satisfeito com esse fato, decidi escrever meu próprio JsonSerializer rápido, que agora é 2,6x mais rápido que o XML da MS - o melhor dos dois mundos :).

mythz
fonte
6

Eu escolheria XML sobre JSON se precisar validar a parte dos dados recebidos, porque o XML suporta isso nativamente por meio do XSD.

lowglider
fonte
3

de JSON - os últimos pés

Ao seguir a rota JSON, você se depara com os mesmos problemas que o XML enfrentou há 10 anos:

A mistura de dados de duas fontes diferentes em um pacote JSON pode fazer com que os rótulos dos elementos colidam entre si. Misture uma guia de remessa e uma fatura e, de repente, o endereço De pode significar algo bem diferente. É por isso que o XML possui espaços para nome .

A conversão entre diferentes estruturas JSON exigiria a criação de código mundano. Uma maneira mais declarativa de mapear dados facilitaria o trabalho. É por isso que o XML tem XSLT .

É necessária a descrição da estrutura de um pacote JSON - seus campos, tipos de dados etc. - para que as pessoas se conectem aos seus serviços. É essencial ter um idioma de metadados para isso. É por isso que o XML tem esquemas .

A manutenção de duas conversas simultâneas cliente-servidor é necessária. Se você fizer duas perguntas ao servidor e receber uma resposta de volta, como você sabe qual pergunta ele responde? É por isso que o XML tem correlação WS .

Özgür
fonte
2
Namespaces são apenas outra solução alternativa; você pode fazer o mesmo no JSON, se quiser. A WS-Correlation também foi adicionada como uma reflexão tardia ao XML e não é "incorporada". Você também pode adicioná-lo ao JSON. A descrição da estrutura (esquemas) não é especial para XML; você pode fazer isso de várias maneiras para qualquer linguagem formal desde a invenção do eBNF. XSLT é um ponto de venda válido, no entanto.
foo
2

JSON é a codificação nativa para javascript. Deve ser muito mais rápido e fácil de trabalhar.

Dustin
fonte
2

Desde a primeira linha em http://json.org/xml.html

XML (Extensible Markup Language) é um formato de texto derivado da SGML (Standard Generalized Markup Language). Comparado ao SGML, o XML é simples. A HyperText Markup Language (HTML), por comparação, é ainda mais simples. Mesmo assim, um bom livro de referência em HTML tem uma polegada de espessura. Isso ocorre porque a formatação e estruturação de documentos é um negócio complicado. . . .

Claramente, o JSON é mais rápido, mas é ainda mais claro que é difícil de ler. Use JSON para velocidade, use XML se houver interação humana e você possa sacrificar a velocidade.


fonte
2
A sua resposta não traz qualquer nova informação ... Mas eu acho que ainda é verdade
1

Uso JSON para qualquer tipo de configuração, intercâmbio de dados ou mensagens. Só uso XML se for necessário por outros motivos ou para marcar semanticamente dados semelhantes a documentos.

Lawrence Dol
fonte
1

XML e JSON são suportados pela Microsoft. Literais XML foram o novo recurso interessante do VB 9. Na próxima versão do ASP.NET 4.0, o JSON é obrigatório para aproveitar o poder do modelo de cliente.

A partir da pergunta que você fez, parece que o JSON pode ser a escolha certa, pois é fácil processar no lado do cliente com ou sem o jQuery.

MoizNgp
fonte
1

Usando JSON

  • Se os dados devem ser consumidos por JavaScript no navegador.
  • O modelo de dados é simples e não complexo (muitos objetos compostos).

Usando XML

  • Principalmente em um ambiente SOA, no qual você integra vários serviços em plataformas e tecnologias heterogêneas.
  • O SOAP tem uma vantagem de poder ser transmitido através de diferentes protocolos, exceto o HTTP.
  • Fácil de usar em ferramentas de transformação de modelo de dados como XSLT, XSL-FO etc.
  • Suporte a muitos bancos de dados para armazenar / consultar dados XML (XQuery).
  • XML é um formato de dados muito maduro, portanto você encontrará muitas ferramentas para suportar qualquer caso de uso em que possa pensar.
Rohitdev
fonte
1

Achei este artigo no bazar digital realmente interessante.

Algumas partes do artigo são citadas abaixo.

Sobre os profissionais JSON:

Se tudo o que você deseja transmitir são valores atômicos ou listas ou hashes de valores atômicos, o JSON tem muitas das vantagens do XML: é diretamente utilizável na Internet, suporta uma ampla variedade de aplicativos, é fácil escrever programas para processar JSON, possui poucos recursos opcionais, é legível por humanos e razoavelmente claro, seu design é formal e conciso, é fácil criar documentos JSON e usa Unicode. ...

Sobre profissionais de XML:

O XML lida notavelmente bem com a riqueza total de dados não estruturados. Não estou preocupado com o futuro do XML, mesmo que sua morte seja comemorada com alegria por um grupo de designers de APIs da web.

E eu não resisto a colocar um "eu te disse!" token na minha mesa. Estou ansioso para ver o que as pessoas JSON fazem quando são solicitadas a desenvolver APIs mais ricas. Quando eles querem trocar dados menos estruturados, eles os colocam no JSON? Vejo menções ocasionais de uma linguagem de esquema para JSON. Outras linguagens seguirão? ...

Christian Vielma
fonte
Esta resposta e os trechos fornecidos deturparam completamente o teor do artigo citado, o que favorece fortemente o JSON. As citações são de terceiros com os quais o autor do artigo discorda. O artigo citado é uma leitura muito boa - portanto, não há voto negativo para essa resposta, apesar da deturpação.
Lawrence Dol
1

Regras rápidas:

  • JSON: formato de dados programa a programa
  • YAML (superconjunto JSON): formato de dados humano para programa
  • XML: formato de marcação de documento

Explicação:

A única função do JSON é serializar dados orientados a objetos usando os tipos de dados comuns à maioria das linguagens de programação: listas , hashes e escalares e, para esse fim, não podem ser superados ou aprimorados. A saber "JSON não tem número de versão [como] nenhuma revisão da gramática JSON é antecipada". - Douglas Crockford (Não pode superar isso como um sinal de que você faz seu trabalho perfeitamente)

O XML já foi vendido como um formato de troca de dados, mas considere os dois casos de uso mais comuns: Comunicação cliente-servidor assíncrona (AJAX) - o JSON praticamente substituiu o XML inteiramente (o X realmente deve ser um J) e serviços da Web : JSON fez do XML uma alternativa redundante.

A outra coisa para a qual XML foi amplamente utilizado foi arquivos de dados graváveis ​​/ legíveis (?) Humanos para programas, mas também aqui você tem um formato mais conciso, mais amigável ao programa e mais amigável ao humano no YAML, um superconjunto JSON.

Portanto, para representação de dados, o JSON supera o XML em geral. O que resta para o XML, então? Representação de documento de conteúdo misto, para o qual foi planejada .

Yarin
fonte
0

A maioria das tecnologias da Web mais recentes funciona com JSON, portanto, é definitivamente um bom motivo para usar JSON. Uma grande vantagem é que, em XML, você pode representar de várias maneiras diferentes as mesmas informações, o que no JSON é mais direto.

JSON IMHO também é muito mais claro que XML, o que torna uma vantagem clara para mim. E se você estiver trabalhando com .NET, o Json.NET é um vencedor claro para ajudá-lo a trabalhar com JSON.

xmorera
fonte