Comparatifs Données et encodage

JSON, YAML ou XML

JSON pour les API et l'échange de données, YAML pour la configuration écrite à la main, XML pour les documents et les normes à schémas. Syntaxe, types, pièges.

Dernière vérification :

AdSense Placeholder
Slot: header_reference_page
Sur cette page

Tous trois représentent des données structurées sous forme de texte. JSON est le plus simple et le plus strict, et le format par défaut des API web. YAML est le plus agréable à écrire à la main et accepte les commentaires, d'où son usage dans les fichiers de configuration (Kubernetes, pipelines de CI, Ansible), mais son typage implicite cache des pièges. XML est le plus verbeux, mais il offre attributs, espaces de noms, mélange de texte et de balisage et une validation par schéma éprouvée : il reste le format des documents et des normes durables (fichiers Office, SVG, RSS, SOAP, plans de site).

En un coup d'œil

Propriété JSON YAML XML
Structure Objets, tableaux, scalaires Tables, séquences, scalaires (par indentation) Arbre d'éléments avec attributs et texte
Types intégrés Chaîne, nombre, true/false, null Chaînes, entiers, flottants, booléens, null, horodatages (selon le schéma) Tout est texte sauf indication d'un schéma
Commentaires Non Oui, # Oui, <!-- -->
Lisibilité à la main Bonne La meilleure Verbeux
Rigueur Très strict (pas de virgule finale, guillemets doubles uniquement) Souple ; les espaces sont significatifs Bonne formation stricte
Références et réutilisation Non Ancres et alias (&, *) Entités, XInclude
Espaces de noms Non Non Oui
Langages de schéma JSON Schema Généralement JSON Schema XSD, DTD, RELAX NG
Usages typiques API REST, stockage navigateur, journaux, manifestes de paquets Configuration, pipelines de CI, Kubernetes, Ansible Documents Office, SVG, RSS/Atom, SOAP, plans de site

Le même enregistrement dans chaque format :

{
  "name": "web-01",
  "port": 8080,
  "enabled": true,
  "tags": ["prod", "eu"]
}
# Server settings
name: web-01
port: 8080
enabled: true
tags:
  - prod
  - eu
<!-- Server settings -->
<server name="web-01">
  <port>8080</port>
  <enabled>true</enabled>
  <tags>
    <tag>prod</tag>
    <tag>eu</tag>
  </tags>
</server>

Ces fichiers font 84, 78 et 161 octets. Les versions JSON et YAML donnent exactement les mêmes données ; dans la version XML, 8080 et true ne sont que du texte, et l'auteur a dû choisir si name serait un attribut ou un élément enfant.

JSON

JSON a six sortes de valeurs et une seule façon d'écrire chacune : les analyseurs de tous les langages s'accordent donc sur le sens d'un document. Cette prévisibilité explique son succès dans les API. La contrepartie, c'est qu'il ne pardonne rien à l'édition manuelle : une virgule finale ou une chaîne entre apostrophes, et tout le fichier est invalide. Vérifiez vos fichiers avec le validateur JSON.

Choisissez JSON quand des programmes échangent des données : requêtes et réponses d'API, messages, journaux, stockage du navigateur, ou tout fichier écrit surtout par du logiciel.

YAML

YAML remplace les accolades par l'indentation et permet commentaires, chaînes multilignes et ancres pour éviter les répétitions. Il est agréable à écrire mais facile à rendre subtilement faux. Les analyseurs YAML 1.1, encore courants (PyYAML en est un), devinent le type des valeurs sans guillemets :

Vous écrivez YAML 1.1 le lit comme
country: no false (le « problème de la Norvège »)
version: 1.10 le nombre 1.1
zip: 01234 le nombre octal 668
time: 12:30 le nombre 750 (base 60)

Mettez entre guillemets les valeurs qui doivent rester des chaînes et validez avec le validateur YAML. Ne chargez jamais de YAML non fiable avec un chargeur capable de construire des objets arbitraires ; utilisez le chargeur sûr de votre bibliothèque.

Choisissez YAML quand des personnes modifient le fichier à la main et que les commentaires aident : configuration d'applications, manifestes de déploiement, workflows de CI.

XML

XML sépare le balisage du texte : il peut donc représenter des documents où prose et structure se mêlent (<p>Click <b>here</b></p>), pas seulement des enregistrements. Les espaces de noms permettent à plusieurs vocabulaires de partager un fichier, et XSD peut imposer types, plages et structure avant d'accepter les données. Il est verbeux, et les analyseurs doivent être configurés avec soin : désactivez les entités externes et le traitement des DTD pour les entrées non fiables afin d'éviter les attaques XXE et « billion laughs ».

Choisissez XML quand une norme ou un partenaire l'exige, quand des documents mêlent texte et balisage, ou quand il vous faut une validation stricte par schéma et des espaces de noms.

Lequel choisir ?

Pour les règles de syntaxe de JSON en détail, voyez Comment fonctionne JSON.

Essayez ces outils

Voir aussi

  • Guide Comment fonctionne JSON
    Les six types de valeur JSON, pourquoi l'analyse échoue, pièges des grands entiers et de l'ordre des clés.
  • Glossaire JSON
    Le JSON (JavaScript Object Notation) est un format texte léger pour données structurées : objets, tableaux, chaînes, nombres, true.
  • Glossaire YAML
    Le YAML est un format de données lisible par les humains qui utilise l'indentation plutôt que des accolades.
  • Glossaire XML
    Le XML (Extensible Markup Language) est un format de texte qui décrit des données avec des balises nommées imbriquées.

Questions fréquemment posées

Presque. YAML 1.2 a été conçu comme un sur-ensemble de JSON : un analyseur YAML 1.2 lit donc les documents JSON ordinaires. Il existe des cas limites (clés très longues, certaines séquences d'échappement, clés en double), et beaucoup d'outils utilisent encore des analyseurs YAML 1.1.

La grammaire JSON n'a pas de syntaxe de commentaire ; elle a été écartée volontairement pour que le format reste un pur format d'échange de données. Pour une configuration commentée, utilisez YAML ou une variante de JSON explicitement prise en charge par votre outil (comme JSONC), et gardez le JSON standard pour l'échange de données.

AdSense Placeholder
Slot: footer_leaderboard