qual é a diferença entre json e xml

Qual é a diferença entre JSON e XML?

A diferença fundamental, que nenhuma outra resposta parece ter mencionado, é que XML é uma linguagem de marcação (como na verdade diz em seu nome), enquanto JSON é uma maneira de representar objects (como também é notado em seu nome).

Uma linguagem de marcação é uma maneira de adicionar informações extras ao texto simples de stream livre, por exemplo

Here is some text. 

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

   Here is some text.   

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

Uma notação de object como JSON não é tão flexível. Mas isso geralmente é uma coisa boa. Quando você está representando objects, simplesmente não precisa da flexibilidade extra. Para representar o exemplo acima em JSON, você precisaria 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 quanto o XML, e a razão é que estamos tentando fazer marcação com uma notação de object. Então, temos que inventar uma maneira de espalhar trechos de texto simples em torno de nossos objects, usando matrizes de “conteúdo” que podem conter uma mistura de strings e objects nesteds.

Por outro lado, se você tem uma hierarquia de objects típica e deseja representá-los em um stream, o JSON é mais adequado para essa tarefa do que o HTML.

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

Aqui está o XML logicamente equivalente:

  Homer Simpsons  Grandpa Marge The Boy Lisa I think that's all of them   

O JSON se parece mais com as estruturas de dados que declaramos nas linguagens de programação. Também tem menos repetição redundante de nomes.

Mas o mais importante de tudo é que tem uma maneira definida de distinguir entre um “registro” (itens não ordenados, identificados por nomes) e uma “lista” (itens ordenados, identificados por posição). Uma notação de object é praticamente inútil sem tal distinção. E XML não tem essa distinção! No meu exemplo XML é um registro e é uma lista, mas eles não são identificados como tal pela syntax.

Em vez disso, o XML tem “elementos” versus “atributos”. Isso parece o mesmo tipo de distinção, mas não é, porque os atributos só podem ter valores de string. Eles não podem ser objects nesteds. Então eu não poderia ter aplicado essa idéia para , porque eu não deveria ter que transformar em uma única string.

Usando um esquema externo ou atributos extras definidos pelo usuário, você pode formalizar uma distinção entre listas e registros em XML. A vantagem do JSON é que a syntax de baixo nível tem essa distinção embutida, então é muito sucinto e universal. Isso significa que o JSON é mais “auto-descritivo” por padrão, o que é um objective importante de ambos os formatos.

Portanto, o JSON deve ser a primeira escolha para a notação de objects, onde o ponto ideal do XML é a marcação do documento.

Infelizmente para o XML, já temos o HTML como a linguagem de marcação de rich text número um do mundo. Foi feita uma tentativa de reformular o HTML em termos de XML, mas não há muita vantagem nisso.

Portanto, o XML deve (na minha opinião) ter sido uma tecnologia de nicho bastante limitada, mais adequada apenas para inventar suas próprias linguagens de marcação de rich text se você não quiser usar HTML por algum motivo. O problema era que, em 1998, ainda havia muito exagero sobre a Web, e o XML tornou-se popular devido à sua semelhança superficial com o HTML. Foi uma escolha estranha de design tentar aplicar aos dados hierárquicos uma syntax realmente projetada para marcação conveniente.

Ambos são formatos de dados hierárquicos, portanto, embora a syntax seja bem diferente, a estrutura é semelhante. Exemplo:

JSON:

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

XML:

   Ford Prefect male   Arthur Dent male   Tricia McMillan female   

O formato XML é mais avançado do que o mostrado no exemplo. Você pode, por exemplo, adicionar atributos a cada elemento e pode usar namespaces para particionar os elementos. Há também padrões para definir o formato de um arquivo XML, a linguagem XPATH para consultar dados XML e o XSLT para transformar XML em dados de apresentação.

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

Enquanto XML foi desenvolvido como um formato de dados independente, JSON foi desenvolvido especificamente para uso com Javascript e AJAX, então o formato é exatamente o mesmo que um object Javascript literal (ou seja, é um subconjunto do código Javascript, como por exemplo contém expressões para determinar valores).

A diferença fundamental entre XML e JSON é que XML é uma meta-linguagem e JSON é uma linguagem de marcação. Ou seja, a syntax XML é projetada especificamente para não ter semântica inerente. Nomes de elementos específicos não significam nada até que um aplicativo de processamento específico os processe de uma maneira específica. Por outro lado, a syntax JSON tem uma semântica específica incorporada: o material entre {} é um object, o material entre [] é um array, etc.

Um analisador JSON, portanto, sabe exatamente o que cada documento JSON significa. Um analisador de XML só sabe separar a marcação dos dados. Para lidar com o significado de um documento XML, você precisa escrever código adicional.

Para ilustrar o ponto, deixe-me emprestar 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 fornece não é realmente a mesma coisa, já que enquanto o exemplo JSON é semanticamente completo, o XML exigiria que fosse interpretado de uma maneira particular para ter o mesmo efeito. Na verdade, o JSON é um exemplo que usa uma 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 predefinida.

Um equivalente XML melhor seria definir uma linguagem XJSON (fictícia) com a mesma semântica que o JSON, mas usando a syntax XML. Pode parecer algo assim:

   persons    name Ford Prefect gender male   name Arthur Dent gender male   name Tricia McMillan gender female      

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

Então, reclamar que o XML não tem a mesma semântica do JSON é perder o ponto. A syntax XML é livre de erros por design. O objective é fornecer uma syntax subjacente que possa ser usada para criar linguagens de marcação com qualquer semântica desejada. Isso torna o XML excelente para criar dados ad-hoc e formatos de documentos, porque você não precisa criar analisadores para eles, basta escrever um processador para eles.

Mas a desvantagem do XML é que a syntax é detalhada. Para qualquer linguagem de marcação que você queira criar, você pode criar uma syntax muito mais sucinta que expresse a semântica particular de um idioma específico. Assim, a syntax do JSON é muito mais compacta do que o meu hipotético XJSON acima.

Se seguirmos que, para formatos de dados realmente amplamente utilizados, o tempo extra necessário para criar uma syntax exclusiva e escrever um analisador para essa syntax é compensado pela maior syntax e syntax mais intuitiva da linguagem de marcação personalizada. Segue-se também que muitas vezes faz mais sentido usar o JSON, com sua semântica estabelecida, do que criar muitas linguagens de marcação XML para as quais você precisa implementar a semântica.

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

É interessante, como uma nota lateral, que a SGML reconheceu isso e forneceu um mecanismo para especificar redução de marcação para um documento SGML. Assim, você poderia realmente escrever uma DTD SGML para a syntax JSON que permitiria que um documento JSON fosse lido por um analisador SGML. O XML removeu esse recurso, o que significa que, hoje, se você quiser uma syntax mais compacta para uma linguagem de marcação específica, terá que deixar o XML para trás, como o JSON faz.

São duas maneiras diferentes de representar dados, mas são bem diferentes. As páginas do wikipedia para JSON e XML dão alguns exemplos de cada um, e há um parágrafo de comparação

São dois formatos de representação de informação. Embora o JSON tenha sido projetado para ser mais compacto, o XML foi projetado para ser mais legível.

O XML usa estruturas de tags para apresentar itens, como item , de modo que um documento XML é um conjunto de tags aninhadas umas nas outras. E a syntax JSON parece uma construção da linguagem Javascript, com todas as coisas como listas e dictionarys:

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

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