Cette question date de 6 ans, mais bizarrement, aucune des réponses n'aborde vraiment les quatre points (vitesse, mémoire, expressivité, portabilité).
Vitesse
Évidemment, cela dépend de l'implémentation, mais parce que JSON est si largement utilisé et si facile à implémenter, il a eu tendance à bénéficier d'un plus grand support natif, et donc d'une plus grande rapidité. Si l'on considère que YAML fait tout ce que JSON fait, et bien plus encore, il est probable que, parmi toutes les implémentations comparables des deux, celle de JSON sera plus rapide.
Cependant, étant donné qu'un fichier YAML peut être légèrement plus petit que son homologue JSON (en raison d'un nombre inférieur de "
y ,
caractères), c'est possible qu'un analyseur YAML hautement optimisé pourrait être plus rapide dans des circonstances exceptionnelles.
Mémoire
En gros, le même argument s'applique. Il est difficile de voir pourquoi un analyseur YAML serait plus efficace en mémoire qu'un analyseur JSON, s'ils représentent la même structure de données.
Expressivité
Comme d'autres l'ont fait remarquer, les programmeurs Python ont tendance à préférer YAML, les programmeurs JavaScript JSON. Je ferai ces observations :
- Il est facile de mémoriser l'ensemble de la syntaxe JSON, et donc d'être sûr de comprendre la signification de n'importe quel fichier JSON. YAML n'est pas vraiment compréhensible par un humain. Le nombre de subtilités et de cas limites est extrême.
- Comme peu d'analyseurs syntaxiques mettent en œuvre l'ensemble de la spécification, il est encore plus difficile d'être certain de la signification d'une expression donnée dans un contexte donné.
- L'absence de commentaires dans JSON est, en pratique, une véritable plaie.
Portabilité
Il est difficile d'imaginer un langage moderne sans une bibliothèque JSON. Il est également difficile d'imaginer un analyseur JSON implémentant moins que la spécification complète. YAML est largement supporté, mais il est moins omniprésent que JSON, et chaque analyseur implémente un sous-ensemble différent. Les fichiers YAML sont donc moins interopérables que vous ne le pensez.
Résumé
JSON est le vainqueur pour les performances (le cas échéant) et l'interopérabilité. YAML est meilleur pour les fichiers gérés par l'homme. HJSON est un bon compromis, bien que sa portabilité soit très réduite. JSON5 est un compromis plus raisonnable, avec une syntaxe bien définie.
35 votes
Sachez que JSON peut être considéré comme un sous-ensemble de YAML : fr.wikipedia.org/wiki/JSON#YAML
2 votes
@Charles, oui, mais ils ont une différence subtile : ajaxian.com/archives/json-yaml-it-s'approcher-de-la-vérité
2 votes
Puisque YAML est (approximativement) un sur-ensemble de JSON, il est impossible de répondre à la question des performances sans savoir si vous utiliserez cette expressivité. Si vous n'en avez pas besoin : à quelle vitesse les analyseurs YAML lisent-ils JSON ? Si vous en avez besoin : dans quelle mesure les analyseurs JSON sont-ils plus lents lorsque vous autorisez une représentation JSON éventuellement plus longue de la même idée ?
0 votes
@jokoon Je suppose que "je préférerais une bibliothèque C" (par exemple libyaml).
0 votes
Je ne le préconise pas, mais j'ai vu certains formats de données Lua qui sont très très simples.
7 votes
Documents YAML puede être complexe et difficile à lire. Une attaque "Billion laughs" est possible avec YAML. D'un autre côté, les objets complexes, les graphes et autres structures peuvent être sérialisés efficacement en YAML. Pour les formats d'échange et les structures simples, JSON est préférable. Pour la sérialisation d'objets complexes, ou pour les définitions de grammaire, YAML peut être préféré.
0 votes
La plus grande différence est que YAML doit être formaté à l'aide d'une règle.