Qual é a diferença entre json e xml [fechado]

Qual é a diferença entre JSON e XML?

Author: Shiva Verma, 2010-04-12

6 answers

A diferença fundamental, que nenhuma outra resposta parece ter mencionado, é que XML é uma linguagem de marcação (como ele realmente diz em seu nome), enquanto JSON é uma forma de representar objetos (como também observado em seu nome).

Uma linguagem de marcação é uma forma de adicionar informação extra ao texto simples, por exemplo

Here is some text.

Com XML (usando um determinado vocabulário de elementos) pode colocar:

<Document>
    <Paragraph Align="Center">
        Here <Bold>is</Bold> some text.
    </Paragraph>
</Document>

Isto é o que torna as linguagens de marcação tão úteis para representar documento.

Uma notação de objecto como o JSON não é tão flexível. Mas isto normalmente é uma coisa boa. Quando você está representando objetos, você simplesmente não precisa da flexibilidade extra. Para representar o exemplo acima no JSON, você realmente teria que resolver alguns problemas manualmente que o XML resolve para você.

{
    "Paragraphs": [
        {
            "align": "center",
            "content": [
                "Here ", {
                    "style" : "bold",
                    "content": [ "is" ]
                },
                " some text."
            ]
        }
    ]
}
Não é tão bom como o XML, e a razão é que estamos a tentar marcar com uma notação de objecto. Por isso, temos de inventar uma forma de espalhar pedaços de texto simples à nossa volta. objetos, usando matrizes de "conteúdo" que podem conter uma mistura de strings e objetos aninhados.

Por outro lado, se você tem uma hierarquia típica de objetos e você quer representá-los em um fluxo, JSON é mais adequado para esta tarefa do que HTML.

{
    "firstName": "Homer",
    "lastName": "Simpson",
    "relatives": [ "Grandpa", "Marge", "The Boy", "Lisa", "I think that's all of them" ]
} 

Aqui está o logicamente equivalente XML:

<Person>
    <FirstName>Homer</FirstName>
    <LastName>Simpsons</LastName>
    <Relatives>
        <Relative>Grandpa</Relative>
        <Relative>Marge</Relative>
        <Relative>The Boy</Relative>
        <Relative>Lisa</Relative>
        <Relative>I think that's all of them</Relative>
    </Relatives>
</Person>
O JSON parece-se mais com as estruturas de dados que declaramos nas linguagens de programação. Também tem repetição menos redundante de nomes. Mas o mais importante de tudo, tem uma forma definida de distinguir entre um "registo" (itens não encomendados, identificados pelos nomes) e uma "lista" (itens ordenados, identificados pela posição). Uma notação de objeto é praticamente inútil sem tal distinção. E XML não tem tal distinção! Em meu exemplo XML <Person> é um registro e <Relatives> é uma lista, mas eles não são identificados como tal pela sintaxe.

Em vez disso, o XML tem "elementos" versus "atributos". Isto parece o mesmo tipo de distinção, mas não é, porque os atributos só podem ter valores de cadeia de caracteres. Não podem ser objetos aninhados. Então eu não poderia ter aplicado essa idéia a <Person>, porque eu não deveria ter que transformar <Relatives> em uma única corda.

Usando um esquema externo, ou atributos extra definidos pelo utilizador, poderá formalizar uma distinção entre listas e registos em XML. A vantagem da JSON é que a sintaxe de baixo nível tem essa distinção incorporada nela, então é muito sucinta e universal. Isso significa que JSON é mais "auto-descrevendo" por padrão, que é um objetivo importante de ambos os formatos.

Então o JSON deve ser a primeira escolha para a notação do objecto, onde o ponto doce do XML é a marcação do documento.

Infelizmente para XML, já temos HTML como a linguagem de marcação de texto mais rica do mundo. Uma tentativa foi feita para reformular HTML em termos de XML, mas não há muita vantagem nisso.

Então XML deve (na minha opinião) ter sido uma tecnologia de nicho bastante limitada, mais adequada apenas para inventar o seu possui ricas linguagens de formatação de texto se você não quiser usar HTML por alguma razão. O problema era que em 1998 ainda havia muita publicidade sobre a Web, e XML tornou-se popular devido à sua semelhança superficial com HTML. Foi uma escolha estranha de design tentar aplicar aos dados hierárquicos uma sintaxe realmente projetada para uma marcação conveniente.

 138
Author: Daniel Earwicker, 2010-04-13 09:28:40

Ambos são formatos de dados para dados hierárquicos, por isso, embora a sintaxe seja bastante diferente, a estrutura é semelhante. Exemplo:

JSON:

{
  "persons": [
    {
      "name": "Ford Prefect",
      "gender": "male"
    },
    {
      "name": "Arthur Dent",
      "gender": "male"
    },
    {
      "name": "Tricia McMillan",
      "gender": "female"
    }
  ]
}

XML:

<persons>
  <person>
    <name>Ford Prefect</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Arthur Dent</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Tricia McMillan</name>
    <gender>female</gender>
  </person>
</persons>

O formato XML é mais avançado do que o mostrado pelo exemplo. Você pode, por exemplo, adicionar atributos a cada elemento, e você pode usar espaços de nomes para elementos de partição. Existem também normas para definir o formato de um arquivo XML, a linguagem XPATH para consultar dados XML, e XSLT para transformar XML em dados de apresentação.

O formato XML já existe há algum tempo, por isso há um monte de software desenvolvido para ele. O formato JSON é bastante novo, então há muito menos suporte para ele.

Enquanto o XML foi desenvolvido como um ser independente, formato de dados, JSON foi desenvolvido especificamente para uso com Javascript e AJAX, de modo que o formato é exatamente o mesmo como um Javascript literal de objeto (isto é, um subconjunto do código Javascript, como, por exemplo, não pode conter as expressões para determinar os valores).

 26
Author: Guffa, 2010-04-12 09:54:44

A diferença fundamental entre XML e JSON é que XML é uma meta-linguagem e JSON é uma linguagem de marcação. Ou seja, a sintaxe XML é projetada especificamente para não ter semântica inerente. Nomes de elementos particulares não significam nada até que uma aplicação de processamento particular os processa de uma forma particular. Em contraste, a sintaxe de JSON tem semântica específica construída em: coisas entre {} é um objeto, coisas entre [] é um array, etc.

Um parser JSON, portanto, sabe exactamente o que todos os documentos JSON significam. Um analisador XML só sabe como separar a marcação dos dados. Para lidar com o Significado de um documento XML, você tem que escrever código adicional.

Para ilustrar o ponto, empreste-me o exemplo de Guffa:
{   "persons": [
  {
    "name": "Ford Prefect",
    "gender": "male"
 },
 {
   "name": "Arthur Dent",
   "gender": "male"
  },
  {
    "name": "Tricia McMillan",
    "gender": "female"
  }   ] }

O equivalente XML que ele dá não é realmente a mesma coisa, uma vez que enquanto o exemplo JSON é semanticamente completo, o XML exigiria ser interpretado de uma forma particular para ter o mesmo efeito. Na verdade, o JSON é um exemplo usa um a linguagem de marcação estabelecida da qual a semântica já é conhecida, enquanto o exemplo XML cria uma nova linguagem de marcação sem qualquer semântica pré-definida.

Um equivalente XML melhor seria definir uma linguagem xjson (fictícia) com a mesma semântica que JSON, mas usando a sintaxe XML. Pode parecer algo parecido com isto.

<xjson>   
  <object>
    <name>persons</name>
    <value>
      <array>
         <object>
            <name>name</name>
            <value>Ford Prefect</value>
            <name>gender</name>
            <value>male</value>
         </object>
         <object>
            <name>name</name>
            <value>Arthur Dent</value>
            <name>gender</name>
            <value>male</value>
         </object>
         <object>
            <name>name</name>
            <value>Tricia McMillan</value>
            <name>gender</name>
            <value>female</value>
         </object>
      </array>
    </value>   
  </object> 
 </xjson>

Uma vez que você escreveu um processador XJSON, ele poderia fazer exatamente o que o processador JSON faz, para todos os tipos de dados que JSON pode representar, e você pode traduzir dados sem perdas entre o JSON e o XJSON.

Então, para reclamar que XML não tem a mesma semântica que JSON é perder o ponto. A sintaxe XML é semática-livre pelo design. O ponto é fornecer uma sintaxe subjacente que pode ser usada para criar linguagens de marcação com qualquer semântica que você quiser. Isso torna o XML ótimo para a criação de dados ad-hoc e formatos de documentos, porque você não tem que construir parsers para eles, você só tem que escrever um processador para eles.

Mas o a desvantagem do XML é que a sintaxe é descritiva. Para qualquer linguagem de marcação que você deseja criar, você pode chegar a uma sintaxe muito mais sucinta que expressa a semântica particular de uma linguagem particular. Assim, a sintaxe JSON é muito mais compacta do que o meu xjson hipotético acima.

Se se segue que para formatos de dados realmente amplamente utilizados, o tempo extra necessário para criar uma sintaxe única e escrever um analisador para essa sintaxe é compensado pela maior succincness e mais intuitivo sintaxe da linguagem de marcação personalizada. Segue-se também que muitas vezes faz mais sentido usar JSON, com a sua semântica estabelecida, do que para formar lotes de linguagens de marcação XML para o qual você precisa então implementar semântica.

Segue-se também que faz sentido protótipos de certos tipos de linguagens e protocolos em XML, mas, uma vez que a linguagem ou protocolo entra em uso comum, pensar em criar uma sintaxe personalizada mais compacta e expressiva.

É interessante, como ... nota lateral, que SGML reconheceu isso e forneceu um mecanismo para especificar redução de margem para um documento SGML. Assim, você poderia realmente escrever um DTD SGML para a sintaxe JSON que permitiria que um documento JSON fosse lido por um analisador SGML. XML removeu esta capacidade, o que significa que, hoje, se você quiser uma sintaxe mais compacta para uma linguagem de marcação específica, você tem que deixar XML para trás, como JSON faz.
 13
Author: Mark Baker, 2011-11-03 16:43:58
São duas formas diferentes de representar dados, mas são muito diferentes. As páginas da Wikipédia para JSON e XML dão alguns exemplos de cada um, e há uma comparação parágrafo
 4
Author: Michael Mrozek, 2010-04-12 06:42:10
São dois formatos de representação da informação. Enquanto JSON foi projetado para ser mais compacto, XML foi projetado para ser mais legível.
 3
Author: Fitzchak Yitzchaki, 2010-04-12 06:42:46

O XML usa uma estrutura de marcas para apresentar itens, como <tag>item</tag>, então, um documento XML é um conjunto de tags aninhados um no outro. E a sintaxe JSON parece uma construção da linguagem Javascript, com todas as coisas como listas e dicionários:

{
 'attrib' : 'value',
 'array' : [1, 2, 3]
}

Então se você usar JSON é realmente simples usar uma strings JSON em muitas linguagens de script, especialmente Javascript e Python.

 2
Author: Enchantner, 2010-04-13 17:18:00