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:
- É fácil memorizar toda a sintaxe do JSON e, portanto, tenha muita confiança em entender o significado de qualquer arquivo JSON. YAML não é verdadeiramente compreensível por qualquer humano. O número de sutilezas e casos extremos é extremo.
- Como poucos analisadores implementam toda a especificação, é ainda mais difícil ter certeza sobre o significado de uma determinada expressão em um determinado contexto.
- A falta de comentários no JSON é, na prática, uma verdadeira dor.
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.