820 votes

Quelle est la différence entre YAML et JSON ?

Quelles sont les différences entre YAML et JSON, en tenant compte notamment des éléments suivants ?

  • Performance (temps de codage/décodage)
  • Consommation de mémoire
  • Clarté de l'expression
  • Disponibilité des bibliothèques, facilité d'utilisation (je préfère le C)

Je prévoyais d'utiliser l'un de ces deux dans notre système embarqué pour stocker les fichiers de configuration.

En rapport :

Dois-je utiliser YAML ou JSON pour stocker mes données Perl ?

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 ?

24voto

jldupont Points 31331

Je trouve que YAML est plus facile à lire : moins de parenthèses, de "", etc. Bien qu'il y ait l'inconvénient des tabulations dans YAML... mais on s'y habitue.

En termes de performances/ressources, je ne m'attendrais pas à de grandes différences entre les deux.

De plus, nous parlons de fichiers de configuration et je ne m'attendrais donc pas à une fréquence élevée d'activité de codage/décodage, non ?

23 votes

Je me demandais ce que vous vouliez dire par l'ennui des onglets . Je crois que la chose est les caractères de tabulation ne sont pas autorisés dans yaml ce qui, personnellement, me semble être une bonne idée dans tout fichier source .

7 votes

@poolie : jldupont fait probablement référence à la espaces blancs de tête syntaxiquement significatifs dans YAML.

11 votes

OK mais ce ne sont pas des onglets.

22voto

Si vous n'avez pas besoin de fonctionnalités que YAML possède et que JSON ne possède pas, je préférerais JSON parce qu'il est très simple et largement supporté (il y a beaucoup de bibliothèques dans de nombreux langages). YAML est plus complexe et a moins de support. Je ne pense pas que la vitesse d'analyse ou l'utilisation de la mémoire seront très différentes, et peut-être pas une grande partie de la performance de votre programme.

4 votes

En quoi YAML est-il plus complexe ?

19 votes

Par exemple, YAML prend en charge les ancres, comme cela a été indiqué dans une autre réponse. Il existe d'autres fonctionnalités, comme les types de données extensibles. Cela rend l'analyse plus complexe, et explique pourquoi YAML a des spécifications plus grandes. Cela peut nuire aux performances en fonction de l'implémentation de l'analyseur (voir cette question) : stackoverflow.com/questions/2451732/ ).

5 votes

La complexité est préférable à la simplicité si cette complexité vous permet d'atteindre une plus grande simplicité globale. Cela est certainement vrai en fonction de la complexité de votre modèle de données.

21voto

Wernight Points 6086

Techniquement YAML offre beaucoup plus que JSON (YAML v1.2 est un sur-ensemble de JSON) :

  • commentaires

  • ancres et héritage - exemple de 3 articles identiques :

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

La plupart du temps, les gens n'utiliseront pas ces fonctionnalités supplémentaires et la principale différence est que YAML utilise l'indentation tandis que JSON utilise des parenthèses . Cela rend YAML plus concis et lisible (pour l'œil averti).

Lequel choisir ?

  • YAML Les fonctionnalités supplémentaires et la notation concise en font un bon choix pour les fichiers de configuration (fichiers non fournis par l'utilisateur).
  • JSON Les fonctionnalités limitées, le large support et l'analyse syntaxique plus rapide en font un excellent choix pour l'interopérabilité et l'efficacité de la gestion de l'information. données fournies par l'utilisateur .

9voto

H S Progr Points 441

De : Livre d'Arnaud Lauret "The Design of Web APIs". :

Le format de données JSON

JSON est un format de données textuelles basé sur la façon dont le langage de programmation JavaScript décrit les données, mais, malgré son nom, il est totalement indépendant du langage (cf. https://www.json.org/ ). Utilisation de JSON vous pouvez décrire des objets contenant des paires nom/valeur non ordonnées ainsi que des tableaux ou des listes contenant des valeurs ordonnées, comme le montre cette figure.

enter image description here

Un objet est délimité par des accolades ({}). Un nom est une chaîne de caractères entre guillemets ("nom") et est séparé de sa valeur par deux points ( :). Une valeur peut être une chaîne de caractères comme "value", un nombre comme 1,23, un booléen (vrai ou faux), la valeur nulle null, un objet ou un tableau. Un tableau est délimité par des parenthèses ([]), et ses valeurs sont séparées par des virgules (,). Le site JSON est facilement analysé à l'aide de n'importe quel langage de programmation. Il est également relativement facile à lire et à écrire. Il est largement adopté pour de nombreuses utilisations telles que les bases de données, les fichiers de configuration et, bien sûr, les API.

YAML

YAML (YAML Ain't Markup Language) est un format de sérialisation de données convivial. Comme JSON, YAML ( http://yaml.org ) est un format de données clé/valeur. La figure montre une comparaison entre les deux.

enter image description here

Notez les points suivants :

  • Il n'y a pas de guillemets doubles (" ") autour des noms et des valeurs des propriétés dans les fichiers YAML .

  • JSON les accolades ({}) et les virgules (,) structurelles sont remplacées par des retours à la ligne et des l'indentation dans YAML .

  • Les parenthèses ([]) et les virgules (,) sont remplacées par des tirets (-) et des retours à la ligne dans le texte suivant YAML .

  • Contrairement à JSON , YAML autorise les commentaires commençant par un dièse (#). Il est relativement facile de convertir l'un de ces formats en l'autre. Attention toutefois, vous perdrez des commentaires lors de la conversion d'un fichier de type YAML pour JSON .

6voto

Chris Koknat Points 1732

Résultats de l'évaluation comparative

Voici les résultats d'un benchmark comparant les temps de chargement de YAML et de JSON, sur Python et Perl.

JSON est beaucoup plus rapide, au détriment de la lisibilité et de fonctionnalités telles que les commentaires.

Méthode d'essai

Résultats

Python 3.8.3 timeit
    JSON:            0.108
    YAML CLoader:    3.684
    YAML:           29.763

Perl 5.26.2-043 Benchmark::cmpthese
    JSON XS:         0.107
    YAML XS:         0.574
    YAML Syck:       1.050

Perl 5.26.2-043 Dumbbench (Brian D Foy, excludes outliers)
    JSON XS:         0.102
    YAML XS:         0.514
    YAML Syck:       1.027

1 votes

JSON est plus rapide car il n'a pas à gérer les références, les nombreux types de conteneurs, les balises, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X