Skip to content

Guía

Convertir YAML a JSON en código

Cuando la conversión pertenece a un script o a un paso de compilación y no a una pestaña del navegador, estos son los equivalentes.

Por yamltojsonfree · Publicado el · Actualizado el

Python, Node.js, Go y la línea de comandos

Cada fragmento lee input.yaml e imprime JSON formateado. Sin embargo no son intercambiables — la nota bajo cada uno te dice qué versión de YAML implementa esa biblioteca, y esa diferencia puede cambiar tus datos en silencio.

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 implementa YAML 1.1, así que aquí no se convierte en False — a diferencia de la herramienta del navegador, que usa 1.2 por defecto.

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 usa YAML 1.2 por defecto — el mismo motor y los mismos valores predeterminados que la herramienta de este sitio.

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 convierte a través de etiquetas JSON, que es lo que usa el propio Kubernetes.

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

Este es mikefarah/yq. El otro yq (kislyuk) es un envoltorio de jq con opciones distintas.

Tres cosas que hacer bien en un script

Usa el cargador seguro. En Python, yaml.load() sin un cargador explícito puede construir objetos Python arbitrarios a partir de YAML etiquetado — lo que equivale a ejecución de código si la entrada no es tuya. safe_load() analiza solo datos simples, y casi nunca hay razón para usar otra cosa.

Conoce tu versión de YAML. PyYAML lee YAML 1.1, así que country: NO sale como False; js-yaml v5 y el analizador de Go con sabor a Kubernetes leen 1.2, así que la misma línea sigue siendo una cadena. Una canalización que convierte con una biblioteca y valida con otra puede contradecirse a sí misma. La lista completa de valores afectados está en la guía YAML 1.1 frente a 1.2.

Maneja los flujos multi-documento. La salida de Kubernetes y Helm suele ser varios documentos separados por ---. Un load normal lee solo el primero y descarta el resto en silencio — usa yaml.safe_load_all() en Python, loadAll() en js-yaml, o la invocación de yq mostrada arriba para obtener todos los documentos.

O sáltate el script por completo

Para una conversión puntual, el conversor gratuito de YAML a JSON hace todo lo anterior en el navegador: flujos multi-documento, anclas y claves de fusión, modos YAML 1.1 y 1.2, y errores fijados a la línea exacta. Nada se sube — el analizador se ejecuta por completo en tu equipo.

Referencias