Skip to content

Guide

Convertir YAML en JSON dans le code

Quand la conversion a sa place dans un script ou une étape de build plutôt que dans un onglet, voici les équivalents.

Par yamltojsonfree · Publié le · Mis à jour le

Python, Node.js, Go et la ligne de commande

Chaque extrait lit input.yaml et imprime du JSON formaté. Ils ne sont pourtant pas interchangeables — la note sous chacun indique quelle version de YAML la bibliothèque implémente, et cette différence peut changer vos données en silence.

Python

import json, yaml

with open("input.yaml") as f:
    data = yaml.safe_load(f)          # safe_load, never load()

print(json.dumps(data, indent=2))

PyYAML implémente YAML 1.1, no devient donc False ici — contrairement à l’outil du navigateur, qui utilise 1.2 par défaut.

Node.js

import { readFileSync } from "node:fs";
import { load } from "js-yaml";

const data = load(readFileSync("input.yaml", "utf8"));
console.log(JSON.stringify(data, null, 2));

js-yaml v5 utilise YAML 1.2 par défaut — le même moteur et les mêmes réglages que l’outil de ce site.

Go

import (
    "encoding/json"
    "os"
    "sigs.k8s.io/yaml"
)

in, _ := os.ReadFile("input.yaml")
out, _ := yaml.YAMLToJSON(in)
os.Stdout.Write(out)

sigs.k8s.io/yaml convertit via les tags JSON, ce qu’utilise Kubernetes lui-même.

Bash (yq)

# Single document
yq -o=json input.yaml

# Multi-document into a JSON array
yq -o=json -I=2 'select(document_index >= 0)' -N input.yaml

# Minified
yq -o=json -I=0 input.yaml

Il s’agit de mikefarah/yq. L’autre yq (kislyuk) est un wrapper de jq avec des options différentes.

Trois choses à faire correctement dans un script

Utilisez le chargeur sûr. En Python, yaml.load() sans chargeur explicite peut construire des objets Python arbitraires à partir de YAML taggé — c’est de l’exécution de code si l’entrée n’est pas la vôtre. safe_load() n’analyse que des données simples, et il n’y a presque jamais de raison d’utiliser autre chose.

Connaissez votre version de YAML. PyYAML lit YAML 1.1, country: NO ressort donc comme False ; js-yaml v5 et l’analyseur Go façon Kubernetes lisent 1.2, la même ligne reste donc une chaîne. Un pipeline qui convertit avec une bibliothèque et valide avec une autre peut se contredire lui-même. La liste complète des valeurs concernées est dans le guide YAML 1.1 vs 1.2.

Gérez les flux multi-documents. Les sorties Kubernetes et Helm sont généralement plusieurs documents séparés par ---. Un simple load ne lit que le premier et ignore le reste en silence — utilisez yaml.safe_load_all() en Python, loadAll() dans js-yaml, ou l’invocation yq ci-dessus pour obtenir chaque document.

Ou sautez complètement le script

Pour une conversion ponctuelle, le convertisseur YAML vers JSON gratuit fait tout ce qui précède dans le navigateur : flux multi-documents, ancres et clés de fusion, modes YAML 1.1 et 1.2, et erreurs épinglées à la ligne exacte. Rien n’est envoyé — l’analyseur s’exécute entièrement sur votre machine.

Références