Quais são as diferenças entre YAML e JSON, considerando especificamente o seguinte?
- Desempenho (tempo de codificação / decodificação)
- Consumo de memória
- Clareza de expressão
- Disponibilidade da biblioteca, facilidade de uso (eu prefiro C)
Eu estava planejando usar um desses dois em nosso sistema incorporado para armazenar arquivos de configuração.
Respostas:
Tecnicamente, o YAML é um superconjunto do JSON. Isso significa que, pelo menos em teoria, um analisador YAML pode entender JSON, mas não necessariamente o contrário.
Veja as especificações oficiais, na seção "YAML: Relação com JSON" .
Em geral, há certas coisas que eu gosto no YAML que não estão disponíveis no JSON.
Na prática, nenhum desses dois últimos pontos provavelmente importará para as coisas que você ou eu fazemos, mas, a longo prazo, acho que o YAML será um formato de serialização de dados mais robusto e viável.
No momento, o AJAX e outras tecnologias da Web tendem a usar JSON. Atualmente, o YAML está sendo usado mais para processos de dados offline. Por exemplo, ele está incluído por padrão no pacote de visão computacional OpenCV baseado em C, enquanto o JSON não.
Você encontrará bibliotecas C para JSON e YAML. As bibliotecas do YAML tendem a ser mais novas, mas não tive problemas com elas no passado. Veja, por exemplo, Yaml-cpp .
fonte
Diferenças:
{a: &b [*b]}
que serão repetidas infinitamente em alguns conversores. Mesmo com a detecção circular, uma "bomba yaml" ainda é possível (consulte xml bomb ).Observações:
fonte
Ignorando a teoria esotérica
Isso responde ao título, não aos detalhes, já que a maioria apenas lê o título em um resultado de pesquisa no google como eu, então achei necessário explicar do ponto de vista do desenvolvedor da web .
O elefante na sala: a própria Internet
O JavaScript domina tão claramente a web por uma margem enorme e os desenvolvedores de JavaScript preferem usar JSON como o formato de dados de forma esmagadora, juntamente com as APIs da web populares, tornando-se difícil argumentar sobre o uso de YAML sobre JSON ao fazer programação da web no sentido geral, pois você provavelmente será derrotado em um ambiente de equipe. De fato, a maioria dos programadores da Web nem sequer sabe que o YAML existe, e muito menos considere usá-lo.
Se você estiver fazendo alguma programação da Web, o JSON é o caminho padrão a ser seguido, porque nenhuma etapa de conversão é necessária ao trabalhar com JavaScript; portanto, você deve apresentar um argumento melhor para usar o YAML sobre JSON nesse caso.
fonte
Esta pergunta tem 6 anos, mas estranhamente, nenhuma das respostas realmente aborda todos os quatro pontos (velocidade, memória, expressividade, portabilidade).
Rapidez
Obviamente, isso depende da implementação, mas como o JSON é tão amplamente usado e fácil de implementar, ele costuma receber maior suporte nativo e, portanto, velocidade. Considerando que o YAML faz tudo o que o JSON faz, além de mais um caminhão, é provável que, de quaisquer implementações comparáveis de ambas, a JSON seja mais rápida.
No entanto, dado que um arquivo YAML pode ser um pouco menor que o seu equivalente JSON (devido a menos
"
e,
caracteres), é possível que um analisador YAML altamente otimizado seja mais rápido em circunstâncias excepcionais.Memória
Basicamente, o mesmo argumento se aplica. É difícil perceber por que um analisador YAML seria mais eficiente em termos de memória que um analisador JSON, se eles representam a mesma estrutura de dados.
Expressividade
Como observado por outros, programadores Python tendem a preferir YAML, programadores JavaScript em vez de JSON. Vou fazer estas observações:
Portabilidade
É difícil imaginar uma linguagem moderna sem uma biblioteca JSON. Também é difícil imaginar um analisador JSON implementando algo menos que a especificação completa. O YAML possui amplo suporte, mas é menos onipresente que o JSON, e cada analisador implementa um subconjunto diferente. Portanto, os arquivos YAML são menos interoperáveis do que você imagina.
Sumário
O JSON é o vencedor em desempenho (se relevante) e interoperabilidade. O YAML é melhor para arquivos mantidos por humanos. HJSON é um compromisso decente, embora com portabilidade muito reduzida. JSON5 é um compromisso mais razoável, com sintaxe bem definida.
fonte
GIT e YAML
As outras respostas são boas. Leia primeiro. Mas vou adicionar outro motivo para usar o YAML às vezes: git .
Cada vez mais, muitos projetos de programação usam repositórios git para distribuição e arquivamento. E, embora o histórico de um repositório git possa igualmente armazenar arquivos JSON e YAML, o método "diff" usado para rastrear e exibir alterações em um arquivo é orientado a linhas. Como o YAML é forçado a ser orientado a linhas, quaisquer pequenas alterações em um arquivo YAML são mais fáceis de serem vistas por um humano.
É verdade, é claro, que os arquivos JSON podem "ficar bonitos", classificando as strings / keys e adicionando o recuo. Mas esse não é o padrão e sou preguiçoso.
Pessoalmente, geralmente uso o JSON para interação sistema a sistema. Costumo usar o YAML para arquivos de configuração, arquivos estáticos e arquivos rastreados. (Eu também geralmente evito adicionar âncoras relacionais YAML. A vida é muito curta para caçar loops.)
Além disso, se velocidade e espaço são realmente uma preocupação, também não uso. Você pode querer olhar para o BSON.
fonte
Acho que o YAML é mais fácil para os olhos: menos parênteses, "" etc. etc. Embora exista um aborrecimento de abas no YAML ... mas alguém pega o jeito.
Em termos de desempenho / recursos, eu não esperaria grandes diferenças entre os dois.
Além disso, estamos falando de arquivos de configuração e, portanto, eu não esperaria uma alta frequência de atividade de codificação / decodificação, não?
fonte
Se você não precisar de nenhum recurso que o YAML possua e o JSON não, prefiro o JSON, porque é muito simples e tem amplo suporte (possui muitas bibliotecas em vários idiomas). O YAML é mais complexo e tem menos suporte. Não acho que a velocidade de análise ou o uso de memória sejam muito diferentes e talvez não seja uma grande parte do desempenho do seu programa.
fonte
Tecnicamente, o YAML oferece muito mais que o JSON (o YAML v1.2 é um superconjunto do JSON):
âncoras e herança - exemplo de 3 itens idênticos:
Na maioria das vezes, as pessoas não usam esses recursos extras e a principal diferença é que o YAML usa recuo enquanto o JSON usa colchetes . Isso torna o YAML mais conciso e legível (para os olhos treinados).
Qual escolher?
fonte
Como essa pergunta agora é destacada ao procurar YAML e JSON, vale a pena notar uma diferença raramente citada entre as duas: licença. O JSON pretende ter uma licença à qual os usuários do JSON devem aderir (incluindo o juridicamente ambíguo "deve ser usado para o bem, não para o mal"). O YAML não possui tal reivindicação de licença e isso pode ser uma diferença importante (para o seu advogado, se não para você).
fonte
{ "": #, [] }
???Às vezes você não precisa decidir por um sobre o outro.
No Go, por exemplo, você pode ter os dois ao mesmo tempo:
fonte
De: Arnaud Lauret Book "O design de APIs da Web". :
O formato de dados JSON
JSON é um formato de dados de texto baseado em como a linguagem de programação JavaScript descreve os dados, mas, apesar do nome, é completamente independente do idioma (consulte https://www.json.org/ ). Usando JSON , você pode descrever objetos que contêm pares não-ordenados de nome / valor e também matrizes ou listas que contêm valores ordenados, conforme mostrado nesta figura.
Um objeto é delimitado por chaves ({}). Um nome é uma string entre aspas ("nome") e é separado de seu valor por dois pontos (:). Um valor pode ser uma sequência como "value", um número como 1,23, um booleano (verdadeiro ou falso), o valor nulo null, um objeto ou uma matriz. Uma matriz é delimitada por colchetes ([]) e seus valores são separados por vírgulas (,). O formato JSON é facilmente analisado usando qualquer linguagem de programação. Também é relativamente fácil de ler e escrever. É amplamente adotado para muitos usos, como bancos de dados, arquivos de configuração e, é claro, APIs.
YAML
O YAML (YAML não é uma linguagem de marcação) é um formato de serialização de dados amigável para humanos. Como o JSON, o YAML ( http://yaml.org ) é um formato de dados de chave / valor. A figura mostra uma comparação dos dois.
Observe os seguintes pontos:
Não há aspas duplas ("") em torno de nomes e valores de propriedades no YAML .
Os chavetas estruturais do JSON ({}) e vírgulas (,) são substituídas por novas linhas e recuo no YAML .
Parênteses de matriz ([]) e vírgulas (,) são substituídos por traços (-) e novas linhas no YAML .
Diferentemente do JSON , o YAML permite comentários começando com uma marca de hash (#). É relativamente fácil converter um desses formatos para o outro. Entretanto, esteja avisado, você perderá comentários ao converter um documento YAML para JSON .
fonte
Acho que o YAML e o JSON são muito eficazes. As únicas duas coisas que realmente ditam quando uma é usada sobre a outra são: qual é a linguagem mais popular. Por exemplo, se eu estiver usando Java, Javascript, usarei JSON. Para Java, usarei seus próprios objetos, que são praticamente JSON, mas faltam em alguns recursos, e os converteremos em JSON, se eu precisar ou o fizer em JSON, em primeiro lugar. Faço isso porque isso é algo comum em Java e facilita a modificação de meu código por outros desenvolvedores de Java. A segunda coisa é se eu estou usando para o programa lembrar atributos, ou se o programa está recebendo instruções na forma de um arquivo de configuração; nesse caso, usarei o YAML, porque é muito fácil de ler, tem uma boa aparência. sintaxe de aparência e é muito fácil de modificar, mesmo que você não tenha idéia de como o YAML funciona. Em seguida, o programa irá lê-lo e convertê-lo em JSON, ou o que for preferido para esse idioma.
No final, honestamente, não importa. JSON e YAML são facilmente lidos por qualquer programador experiente.
fonte
JSON não pode lidar com grandes dados comparando yml
Não é adequado para lidar com diferentes formatos de multimídia.
JSON não tem um recurso para suportar 'comentários'. Isso pode ser incluído apenas como um atributo adicional.
O YAML tem algumas vantagens sobre o JSON, como auto-referência, suporte para tipos de dados complexos, literais de bloco incorporados, comentários e muito mais.
fonte