Quelles sont les différences entre YAML et JSON, compte tenu en particulier des éléments suivants?
- Performances (temps d'encodage / décodage)
- Consommation de mémoire
- Clarté de l'expression
- Disponibilité de la bibliothèque, facilité d'utilisation (je préfère C)
J'avais l'intention d'utiliser l'un de ces deux dans notre système embarqué pour stocker les fichiers de configuration.
En relation:
Dois-je utiliser YAML ou JSON pour stocker mes données Perl?
Réponses:
Techniquement, YAML est un sur-ensemble de JSON. Cela signifie que, en théorie du moins, un analyseur YAML peut comprendre JSON, mais pas nécessairement l'inverse.
Voir les spécifications officielles, dans la section intitulée "YAML: Relation to JSON" .
En général, il y a certaines choses que j'aime à propos de YAML qui ne sont pas disponibles dans JSON.
Dans la pratique, aucun de ces deux derniers points n'aura probablement d'importance pour les choses que vous ou moi faisons, mais à long terme, je pense que YAML sera un format de sérialisation des données plus robuste et viable.
À l'heure actuelle, AJAX et d'autres technologies Web ont tendance à utiliser JSON. YAML est actuellement davantage utilisé pour les processus de données hors ligne. Par exemple, il est inclus par défaut dans le package de vision par ordinateur OpenCV basé sur C, contrairement à JSON.
Vous trouverez des bibliothèques C pour JSON et YAML. Les bibliothèques de YAML ont tendance à être plus récentes, mais je n'ai eu aucun problème avec elles par le passé. Voir par exemple Yaml-cpp .
la source
Différences:
{a: &b [*b]}
qui bouclera à l'infini dans certains convertisseurs. Même avec une détection circulaire, une "bombe yaml" est toujours possible (voir bombe xml ).Observations:
la source
Contourner la théorie ésotérique
Cela répond au titre, pas aux détails car la plupart lisent simplement le titre à partir d'un résultat de recherche sur google comme moi, donc j'ai pensé qu'il était nécessaire d'expliquer du point de vue du développeur Web .
L'éléphant dans la pièce: Internet lui-même
JavaScript domine si clairement le Web par une énorme marge et les développeurs JavaScript préfèrent utiliser JSON comme format de données de manière écrasante avec les API Web populaires, il devient donc difficile d'argumenter en utilisant YAML plutôt que JSON lors de la programmation Web au sens général, car vous serez probablement dépassé dans un environnement d'équipe. En fait, la majorité des programmeurs Web ne savent même pas que YAML existe, encore moins d'envisager de l'utiliser.
Si vous faites de la programmation Web, JSON est la méthode par défaut car aucune étape de traduction n'est nécessaire lorsque vous travaillez avec JavaScript, vous devez donc trouver un meilleur argument pour utiliser YAML sur JSON dans ce cas.
la source
Cette question a 6 ans, mais étrangement, aucune des réponses ne répond vraiment aux quatre points (vitesse, mémoire, expressivité, portabilité).
La 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 à recevoir un plus grand support natif, et donc une vitesse. Étant donné que YAML fait tout ce que fait JSON, plus un chargement supplémentaire, il est probable que de 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 de moins de caractères
"
et,
), il est possible qu'un analyseur YAML hautement optimisé soit plus rapide dans des circonstances exceptionnelles.Mémoire
Fondamentalement, le même argument s'applique. Il est difficile de voir pourquoi un analyseur YAML serait jamais plus efficace en mémoire qu'un analyseur JSON, s'ils représentent la même structure de données.
Expressivité
Comme noté par d'autres, les programmeurs Python ont tendance à préférer YAML, les programmeurs JavaScript à JSON. Je ferai ces observations:
Portabilité
Il est difficile d'imaginer un langage moderne sans bibliothèque JSON. Il est également difficile d'imaginer un analyseur JSON implémentant quelque chose de moins que la spécification complète. YAML est largement pris en charge, mais est moins omniprésent que JSON, et chaque analyseur implémente un sous-ensemble différent. Par conséquent, les fichiers YAML sont moins interopérables que vous ne le pensez.
Sommaire
JSON est le gagnant 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 compromis décent bien qu'avec une portabilité très réduite. JSON5 est un compromis plus raisonnable, avec une syntaxe bien définie.
la source
GIT et YAML
Les autres réponses sont bonnes. Lisez-les d'abord. Mais j'ajouterai une autre raison d'utiliser parfois YAML: git .
De plus en plus, de nombreux projets de programmation utilisent des référentiels git pour la distribution et l'archivage. Et, alors que l'historique d'un dépôt git peut également stocker des fichiers JSON et YAML, la méthode "diff" utilisée pour suivre et afficher les modifications apportées à un fichier est orientée ligne. Étant donné que YAML est forcé d'être orienté ligne, tout petit changement dans un fichier YAML est plus facile à voir par un humain.
Il est vrai, bien sûr, que les fichiers JSON peuvent être «rendus jolis» en triant les chaînes / clés et en ajoutant une indentation. Mais ce n'est pas la valeur par défaut et je suis paresseux.
Personnellement, j'utilise généralement JSON pour l'interaction de système à système. J'utilise souvent YAML pour les fichiers de configuration, les fichiers statiques et les fichiers suivis. (J'évite également généralement d'ajouter des ancres relationnelles YAML. La vie est trop courte pour rechercher des boucles.)
De plus, si la vitesse et l'espace sont vraiment un problème, je n'utilise pas non plus. Vous voudrez peut-être regarder BSON.
la source
Je trouve que YAML est plus agréable pour les yeux: moins de parenthèses, "" etc.
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 donc je ne m'attendrais pas à une fréquence élevée d'activité d'encodage / décodage, non?
la source
Si vous n'avez besoin d'aucune des fonctionnalités de YAML et pas de JSON, je préférerais JSON car il est très simple et est largement pris en charge (a beaucoup de bibliothèques dans de nombreuses langues). 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 des performances de votre programme.
la source
Techniquement, YAML offre beaucoup plus que JSON (YAML v1.2 est un surensemble de JSON):
ancres et héritage - exemple de 3 éléments identiques:
La plupart du temps, les gens n'utilisent pas ces fonctionnalités supplémentaires et la principale différence est que YAML utilise l'indentation tandis que JSON utilise des crochets . Cela rend YAML plus concis et lisible (pour l'œil entraîné).
Lequel choisir?
la source
Étant donné que cette question figure désormais en bonne place lors de la recherche de YAML et JSON, il convient de noter une différence rarement citée entre les deux: la licence. JSON prétend avoir une licence à laquelle les utilisateurs de JSON doivent adhérer (y compris le légalement ambigu "doit être utilisé pour le Bien, pas pour le Mal"). YAML ne porte aucune réclamation de licence de ce type, et cela pourrait être une différence importante (pour votre avocat, sinon pour vous).
la source
{ "": #, [] }
???Parfois, vous n'avez pas à choisir l'un plutôt que l'autre.
Dans Go, par exemple, vous pouvez avoir les deux en même temps:
la source
De: Arnaud Lauret Livre «La conception des API Web». :
Le format de données JSON
JSON est un format de données texte basé sur la façon dont le langage de programmation JavaScript décrit les données mais est, malgré son nom, complètement indépendant du langage (voir https://www.json.org/ ). À l'aide 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 illustré dans cette figure.
Un objet est délimité par des accolades ({}). Un nom est une chaîne entre guillemets ("nom") et est séparé de sa valeur par deux points (:). Une valeur peut être une chaîne comme "valeur", 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 crochets ([]) et ses valeurs sont séparées par des virgules (,). Le format JSON est facilement analysé en utilisant 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 des deux.
Notez les points suivants:
Il n'y a pas de guillemets doubles ("") autour des noms de propriété et des valeurs dans YAML .
Les accolades structurelles ({}) et les virgules (,) de JSON sont remplacées par des sauts de ligne et un retrait en YAML .
Les crochets de tableau ([]) et les virgules (,) sont remplacés par des tirets (-) et des retours à la ligne dans YAML .
Contrairement à JSON , YAML autorise les commentaires commençant par une marque de hachage (#). Il est relativement facile de convertir l'un de ces formats dans l'autre. Soyez averti cependant, vous perdrez des commentaires lors de la conversion d'un document YAML en JSON .
la source
Je trouve que YAML et JSON sont très efficaces. Les deux seules choses qui dictent vraiment quand l'une est utilisée par rapport à l'autre pour moi est une, avec quoi la langue est la plus utilisée. Par exemple, si j'utilise Java, Javascript, j'utiliserai JSON. Pour Java, j'utiliserai leurs propres objets, qui sont à peu près JSON mais manquant de certaines fonctionnalités, et le convertirai en JSON si j'en ai besoin ou le ferai en JSON en premier lieu. Je le fais parce que c'est une chose courante en Java et qu'il est plus facile pour les autres développeurs Java de modifier mon code. La deuxième chose est de savoir si je l'utilise pour que le programme se souvienne des attributs, ou si le programme reçoit des instructions sous la forme d'un fichier de configuration, dans ce cas, j'utiliserai YAML, car il est très facilement lisible par l'homme, a une bonne recherche syntaxe, et est très facile à modifier, même si vous ne savez pas comment fonctionne YAML. Ensuite, le programme le lira et le convertira en JSON, ou tout ce qui est préféré pour cette langue.
En fin de compte, cela n'a vraiment pas d'importance. JSON et YAML sont facilement lisibles par tout programmeur expérimenté.
la source
JSON ne peut pas gérer de grandes données en comparant le yml
Ne convient pas pour gérer différents formats multimédias.
JSON n'a pas de fonctionnalité pour prendre en charge les «commentaires». Cela pourrait être inclus uniquement comme attribut supplémentaire.
YAML présente certains avantages par rapport à JSON, comme l'auto-référence, la prise en charge de types de données complexes, les littéraux de blocs intégrés, les commentaires et plus encore.
la source