Podemos substituir XML por JSON completamente? [fechadas]


78

Tenho certeza que muitos desenvolvedores estão familiarizados com XML e JSON , e eles usaram os dois. Portanto, não faz sentido explicar o que são e qual é o seu objetivo, mesmo que seja breve.

Se tentarmos mapear seus conceitos, podemos dizer (me corrija se estiver errado):

  1. Tags XML são equivalentes a JSON {}
  2. Atributos XML são equivalentes às propriedades JSON
  3. A coleção de tags XML é equivalente a JSON []

A única coisa em que consigo pensar, que não existe no JSON, é o XML Namespaces .

A questão é, considerando esse mapeamento e considerando que o JSON é muito mais leve nesse mapeamento, podemos ver um mundo no futuro (ou pelo menos pensar teoricamente em um mundo) sem XML, mas com o JSON fazendo tudo o que XML faz? Podemos usar JSON em qualquer lugar que o XML for usado?

PS: Observe que eu já vi essa pergunta. É algo completamente diferente do que estou perguntando aqui. Assim, por favor, não mencione duplicado .


14
Podemos (e devemos) substituir todas essas coisas mal projetadas e exageradas por expressões S, obviamente. O mundo sem XML seria realmente um lugar muito melhor, mas infelizmente isso não passa de um pensamento positivo.
SK-logic

19
Ugh. Eu detesto essas perguntas. Penso que este é realmente um caso para usar a ferramenta certa para o trabalho, e não se um pode substituir outro completamente. Existem tão poucos absolutos no mundo, mesmo com computadores. Eu não conseguia imaginar fazer nada do JSON, pelo menos onde as respectivas tecnologias estão agora.
Philip Regan

2
@ Philip, esta não é uma questão para demolir algo. Ele apenas tenta ver o que falta ao JSON, para que possamos melhorá-lo. :)
Saeed Neamati

4
Uma discussão sobre as diferenças entre duas tecnologias para ver onde as melhorias podem ser feitas é muito diferente do que perguntar se uma pode ser substituída pela outra. O primeiro é mais crítica acadêmica do que o último, que soa mais antagônica da frustração do que qualquer coisa
Philip Regan

12
Isso não é hipotético. Parece que o JSON não possui um recurso que o XML possui.
S.Lott

Respostas:


153

O que dá ao XML seu poder e muita de sua complexidade é o conteúdo misto. Coisas assim:

<p>A <b>fine</b> mess we're in!</p>

Nem tente fazer isso no JSON ou manipule-o nas linguagens de programação convencionais. Eles não foram projetados para o trabalho.

Esse tipo de pergunta geralmente vem de pessoas que esquecem que o M em XML significa marcação. É uma maneira de pegar texto sem formatação e adicionar marcações para criar texto estruturado. Também é bastante útil para dados antiquados, mas não é para isso que foi projetado ou onde estão seus principais pontos fortes. Existem várias maneiras de lidar com dados simples, e o JSON é uma delas.


33
+1: esse é o recurso distintivo. Ponto excelente.
S.Lott

7
@ Michael, você acabou de me ensinar algo valioso. Esta é uma ótima resposta. +1.
Saeed Neamati

9
.... Existem 3 nós indie de P, A o elemento B e `bagunça em que estamos! '. É uma matriz, que você pode simplesmente explicar em JSON.
Incognito

5
@ Rob Não, mas estou explicando que você pode definir as coisas expressas pelo HTML com maior clareza e, talvez, uma análise mais rápida via JSON (pois é necessária menos análise do texto para encontrar os diferentes tipos de nós). Se o HTML fosse JSON-ML, poderíamos ter mais desenvolvedores que realmente entendem o DOM, nós de texto e ligações.
Incognito

5
@ByrneReese: sim, é XML e sim, é válido. O fato de também ser HTML não vem ao caso; de fato, XHTML também é XML válido. :-)
Martijn

31

A principal diferença, eu acho, é o fato de o XML ser projetado para se auto-explicar com seus dtds e tudo mais.

Com o JSON, você precisa assumir muito sobre os dados que está recebendo.


7
"XML é projetado para ser autoexplicativo". Você pode fornecer um link ou uma referência para isso? Não vejo isso nos padrões W3C para XML, e estou me perguntando de onde vem essa noção. Parece uma lenda urbana mais do que uma meta de design declarada.
S.Lott

6
@ S.Lott: Acho que o que ele quer dizer com isso é a natureza das tags XML, por si só, permite que o conteúdo marcado seja auto-explicativo, ou seja, as DTDs são opcionais, portanto, XML bem formado pode ser analisado sem uma. Mas eu concordo com a sua opinião sobre o assunto porque, tecnicamente, o JSON tem a mesma capacidade, então não vejo a auto-explicação como a principal diferença (não sei por que isso continua sendo votado), mas sim Michael Kay está mais em jogo.
Philip Regan

5
@ S.Lott concordou. Eu diria que o JSON aqui json.org/example.html é mais fácil de entender e melhor documentado do que o XML associado devido à sua falta de verbosidade.
Doug T.

4
@ Michael Borgwardt: Sem um XSD completo (incluindo algum tipo de suporte de ontologia), os nomes das tags não me dizem nada. "significativo" é difícil de realizar em geral. Isso não me deixa claro sobre o que "autoexplicação" deve significar na resposta. E eu não tenho evidências de que era mesmo uma meta de design para XML.
S.Lott

4
@ Philip Regan: Tal como acontece com "código auto-explicativo", parece não ser um recurso do XML. Se é apenas um objetivo de implementação universal que se aplica a todas as linguagens de software (código, acesso a dados, marcação, o que for), talvez as pessoas não devam mencioná-lo especificamente em XML.
S.Lott

21

Uma tradução literal para JSON geralmente é menos sucinta e menos clara. Considerar:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

A representação JSON mais eficaz que eu já vi disso:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

Agora, imagine isso para um arquivo XML inteiro. Não estou dizendo que o JSON não tem seu lugar, mas o XML não deve ser descartado.


8
Agora considere o SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic

2
@ SK-Logic: Isso é ótimo para um exemplo trivial, mas eu não conseguia imaginar fazer conteúdo misto profundamente aninhado - como um livro - com isso. Eu acho que o SXML é tanto um exercício acadêmico quanto qualquer outra coisa.
Philip Regan

3
@ Philip Regan: Como escrever um S-Exp com mais dificuldade do que usar chevronitis, quando é uma transformação trivial de 1: 1 em uma forma menos detalhada?
Maaartinus

@maartinus: Minha área de especialização é na publicação de livros: qualquer tipo de livro é um animal profundo e complexo, com uma ampla variedade de conteúdo que requer gerenciamento explícito. DocBook e DITA são muito mais legíveis que o exemplo acima.
Philip Regan

1
@ Philip Regan, SXML é muito fácil de editar, bem diferente do XML. E é claro que é uma escolha muito melhor para protocolos, desnecessário mencionar a superioridade das ferramentas disponíveis.
SK-logic

14

JSON e XML são duas maneiras de formatar dados. Ambos são capazes de fazê-lo perfeitamente bem, então o JSON pode fazer tudo o que o XML faz? Sim.

Mas ..... Uma pergunta mais relevante pode não ser o que XML / JSON pode fazer, mas o que você pode fazer com XML / JSON.

Existem várias coisas que você pode fazer com XML que eu acho que não com JSON, como traduzir com XLST, pesquisar com XPath e validar com esquemas. Tudo muito, muito útil.


5
Exceto para conteúdo misto, onde os dados contêm tags. JSON não faz isso muito bem.
S.Lott

11

Há muitas funcionalidades usando XSLT que podem não ser possíveis com JSON. Portanto, se não forem funcionalmente equivalentes, não poderão substituir um ao outro.


3
Dito isso, você pode usar outra linguagem para desserializar, manipular e serializar JSON, e o XSLT não é XML, portanto, esse ponto é realmente discutível.
StuperUser

3
XSLT é XML - ver o esquema aqui
treecoder

Obrigado @greengit, tive apenas uma breve exposição a ele, atualizei a resposta.
StuperUser

2
@StuperUser: Como pode ser "impossível" com o JSON? É apenas uma transformação, talvez as ferramentas ainda estejam faltando. Ou o problema está relacionado à falta de atributos no JSON?
Maaartinus 20/09/11

1
@StuperUser: XSLT é uma linguagem (subconjunto de XML) para a qual alguns intérpretes foram escritos em pelo menos uma outra linguagem (provavelmente em C, Java, ...). O mesmo poderia ser feito para o JSON (defina algum JSON-T, escreva o intérprete), não é?
Maaartinus

8

O fato é que teremos que conviver com os dois por um longo tempo, e ser um fanático por JSON é "considerado prejudicial".


7

O JSON é relativamente novo e os sistemas legados não o suportam. A atualização de sistemas legados é cara e apresenta bugs. JSON não substituirá XML a qualquer momento no futuro próximo.


2
Obrigado pela sua resposta. O que tenho em mente é uma revisão técnica, e não uma estratégia de implementação. Eu só quero saber, por exemplo, para novas versões desses sistemas legados, podemos descartar XML completamente e usar JSON? Se não, o que sentimos falta no JSON?
Saeed Neamati

Por outro lado, não usei XML, apenas JSON, nos últimos anos. E boa viagem. Claro que o XML é mais empreendedor. O que é ótimo para segurança no trabalho, não para eficiência.
precisa saber é o seguinte

6

Eu diria que cwallenpoole faz uma excelente observação. Embora a maioria dos XML possa ser convertida para JSON, se é melhor fazê-lo, é um ponto separado.

O JSON se presta a estruturas de dados pelo menos tão bem quanto XML e provavelmente melhor, mas o XML lê muito mais naturalmente que o JSON ao marcar documentos textuais, onde as tags são usadas dentro de um fluxo maior de texto, em vez de simplesmente como uma maneira de delimitar uma hierarquia de campos.

Embora o HTML 5 possa ter seu próprio analisador, isso ainda deixa aplicativos como o DocBook.


O JSON pode obviamente conter strings que podem conter HTML.
precisa saber é o seguinte

6

Depende do domínio. Em termos de serviços web? Absolutamente. É totalmente vergonhoso que os fornecedores ainda estejam pressionando o SOAP em seus clientes. REST + JSON todo o caminho.

Agora, quando você está falando de dados complexos e estruturados com informações de estilo, como o Docbook ou outra implementação? Esse é um domínio adequado para XML.


4

Por que limitar-se a JSON quando YAML é um superconjunto e muito mais expressivo e, portanto, poderoso que XML ou JSON.

Dito isto, se você usar as estruturas de serialização corretas, poderá serializar e desserializar todos os formatos mencionados acima com algumas linhas simples de código.


3

Fica feio quando você tenta modelar esses dois objetos no JSON:

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

Usando o JSON como é usado em 99% dos casos, perde-se:

{ name: "John Doe" } 

E agora você tem que adicionar algumas meta-estruturas e toda a beleza do JSON desaparece enquanto você fica com as desvantagens.


11
o JSON equivalente ao XML fornecido é { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Portanto, tecnicamente, sua resposta não está correta. :)
Saeed Neamati

Claro, a única coisa que falta no JSON são os atributos e são inúteis para modelar objetos (ao contrário da marcação). Às vezes, os atributos são usados ​​como um atalho para o que pode ser expresso usando dados aninhados (por exemplo, nos arquivos de configuração do Hibernate), o que é útil, mas na verdade a existência de opções dificulta. Arquivos de configuração e objetos de modelagem são dois lugares em que o JSON é claramente superior.
maaartinus 20/09/11

2
@SaeedNeamati, então como você modelaria <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>em JSON?
svick

6
{customers: [{name: 'John Doe'}, {name: 'John Doe'}]}?
scrwtp 22/09

2
@Stijn - certo, e isso funciona, mas confirma o comentário da resposta original: "você precisa adicionar algumas meta-estruturas" para modelar certas coisas que caem mais naturalmente no XML.
Matt R

3

Não sei se existe esse recurso para JSON, mas no .NET pelo menos você pode validar XML em um determinado esquema. Essa é uma vantagem valiosa do XML aos meus olhos.


2
json tem esquemas, também: json-schema.org
lordvlad
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.