jsonyamlconfiguration

JSON vs YAML : Quand utiliser chaque format ?

· Cosyslabs

JSON est le bon choix pour les API, l'échange de données et la configuration générée par des machines. YAML est préférable pour les fichiers de configuration rédigés par des humains où les commentaires, la lisibilité et la ponctuation minimale sont importants. YAML est un surensemble de JSON — tout document JSON valide est du YAML valide, mais YAML comporte des pièges significatifs que vous devez connaître avant de l'adopter.

Comparaison de syntaxe

// JSON
{
  "serveur": {
    "hôte": "localhost",
    "port": 8080,
    "tls": true
  },
  "baseDeDonnées": {
    "url": "postgres://localhost/mabd",
    "pool": {
      "min": 2,
      "max": 10
    }
  },
  "fonctionnalités": ["auth", "api", "admin"]
}
# YAML — mêmes données, plus lisibles
serveur:
  hôte: localhost
  port: 8080
  tls: true

baseDeDonnées:
  url: postgres://localhost/mabd
  pool:
    min: 2
    max: 10

fonctionnalités:
  - auth
  - api
  - admin

YAML supprime les guillemets, les accolades, les crochets et les virgules. Il utilise l'indentation (espaces uniquement — pas de tabulations) pour exprimer la structure.

YAML est un surensemble de JSON

Vous pouvez intégrer du JSON directement dans un fichier YAML et c'est valide :

# Ceci est du YAML valide
nom: Alice
config: {"debug": true, "niveau": 3}

Cela signifie que les parseurs YAML peuvent analyser du JSON, et que les convertisseurs YAML-vers-JSON sont sans perte (sauf pour les fonctionnalités spécifiques à YAML comme les ancres et les commentaires, que JSON ne peut pas représenter).

Où JSON gagne

Réponses d'API

JSON est la lingua franca des API REST. Chaque client HTTP, de curl au fetch du navigateur, gère nativement JSON :

const réponse = await fetch("/api/utilisateurs");
const données = await réponse.json(); // Analyse JSON intégrée

YAML n'a pas de support natif dans le navigateur et ajoute une dépendance de parseur (~15 Ko pour js-yaml).

Gestion stricte des types

JSON a des types explicites : chaîne, nombre, booléen, null, tableau, objet. YAML infère les types à partir des valeurs, ce qui cause des bogues notoires.

Données générées par machines

Les programmes générant de la configuration ou des données doivent émettre du JSON. JSON est non ambigu, largement supporté et ne dépend pas des espaces.

Écosystème JavaScript

package.json, tsconfig.json, eslintrc.json — les outils JavaScript se sont standardisés sur JSON. Les éditeurs fournissent la validation JSON Schema avec autocomplétion et détection d'erreurs.

Où YAML gagne

Configuration rédigée par des humains

# YAML permet les commentaires — JSON ne le permet pas
# Ce commentaire explique pourquoi le timeout est élevé
serveur:
  timeout: 30000  # millisecondes — les clients legacy ont besoin de plus de temps

# Les chaînes multilignes sont lisibles en YAML
message: |
  Bienvenue dans le système.
  Votre compte a été créé.
  Veuillez vérifier votre e-mail pour valider.

Kubernetes, GitHub Actions, Docker Compose

L'écosystème cloud-native s'est standardisé sur YAML pour les manifestes et les pipelines :

# Workflow GitHub Actions
name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm test

Chaînes multilignes

YAML gère élégamment les chaînes multilignes avec des scalaires de bloc :

# Scalaire de bloc littéral — préserve les sauts de ligne
description: |
  Ligne un.
  Ligne deux.
  Ligne trois.

# Scalaire de bloc plié — les sauts de ligne deviennent des espaces
résumé: >
  Ce long texte sera
  plié en une seule ligne
  lors de l'analyse.

JSON nécessite des \n échappés :

{
  "description": "Ligne un.\nLigne deux.\nLigne trois."
}

Pièges de YAML (Le problème de la Norvège et autres)

L'inférence de types de YAML a causé de vrais incidents en production.

Le problème de la Norvège

pays:
  - GB
  - DE
  - NO   # YAML 1.1 analyse ceci comme booléen false !
  - SE

Dans YAML 1.1 (utilisé par de nombreux anciens parseurs), no, NO, No sont analysés comme false. De même, yes, YES, Yes deviennent true. YAML 1.2 (2009) supprime ce comportement, mais de nombreux parseurs implémentent encore 1.1.

Correction : Mettre entre guillemets les valeurs qui pourraient être mal interprétées :

pays:
  - "GB"
  - "DE"
  - "NO"   # Maintenant en toute sécurité une chaîne
  - "SE"

Analyse des nombres octaux

permissions_fichier: 0777  # YAML 1.1 : analysé comme octal 511, pas décimal 777 !
port: 0755                  # octal 493

En YAML 1.2, les zéros initiaux n'impliquent pas l'octal. En 1.1, si. Mettez entre guillemets les valeurs numériques où la précision est importante.

Erreurs d'indentation

YAML n'utilise que des espaces — mélanger tabulations et espaces provoque des erreurs de parseur :

serveur:
  hôte: localhost
	port: 8080  # TABULATION ici — erreur d'analyse YAML !

Clés en double

config:
  debug: true
  debug: false  # Lequel gagne ? Comportement indéfini

Conversion

// YAML vers JSON (Node.js)
import yaml from "js-yaml";
import fs from "fs";

const contenuYaml = fs.readFileSync("config.yaml", "utf8");
const analysé = yaml.load(contenuYaml);
const json = JSON.stringify(analysé, null, 2);
import yaml, json

with open("config.yaml") as f:
    données = yaml.safe_load(f)  # Utilisez safe_load, pas load !

print(json.dumps(données, indent=2))

Utilisez toujours yaml.safe_load() en Python, jamais yaml.load(). La version non sécurisée peut exécuter du code Python arbitraire via la désérialisation YAML — un vecteur RCE connu.

Guide de décision

SituationChoisir
Réponses d'API RESTJSON
gRPC / Protocol BuffersAucun (binaire)
package.json, tsconfig.jsonJSON
Manifestes KubernetesYAML
GitHub Actions / CIYAML
Docker ComposeYAML
Playbooks AnsibleYAML
Config où les commentaires sont nécessairesYAML
Config générée par machinesJSON
Config rédigée par humainsYAML
Données avec beaucoup de chaînesYAML (pas de guillemets nécessaires)

Essayez maintenant

Convertissez instantanément entre JSON et YAML avec l'Outil Formateur JSON et l'Outil Formateur YAML — les deux fonctionnent entièrement dans votre navigateur.

Plus d'outils de Cosyslabs

  • PDF Convert All — Convertissez, fusionnez et compressez des PDFs. De nombreux pipelines de génération de documents consomment de la configuration JSON ou YAML.
  • Unit Convert All — Convertissez des valeurs de mesure souvent trouvées dans les fichiers de configuration (ex: timeouts en ms, tailles de fichiers en Mo).
  • Rough Estimator — Estimez l'effort de migration de systèmes de configuration basés sur JSON vers YAML (ou vice-versa).
  • Cosyslabs — Le studio derrière Dev Tools !, Routine Toolkit, et plus.