JSON a YAML
Para Kubernetes, Compose y archivos de CI, sin enviar tu configuración a ninguna parte.
Nada de lo que pegues sale de tu navegador. La lista de permitidos de connect-src convierte eso en una garantía del navegador, no en una promesa. Compruébalo tú mismo
Convierte JSON a YAML para manifiestos de Kubernetes, archivos de Docker Compose, workflows de GitHub Actions y cualquier otra cosa que prefiera el formato legible.
Como YAML es un superconjunto de JSON, esta conversión siempre funciona. La dirección interesante es la contraria.
Qué cambia y qué no
Todo valor JSON tiene un equivalente en YAML, así que no se pierde nada. Los objetos pasan a ser mappings, los arrays pasan a ser secuencias, y las comillas alrededor de las claves y de las cadenas simples desaparecen.
Las cadenas que podrían confundirse con otra cosa conservan sus comillas. Eso incluye la palabra no, la palabra yes, cualquier cosa que parezca un número y cualquier cosa que parezca una fecha. El generador es conservador en esto a propósito, por el motivo que se explica en la página de YAML a JSON.
Enteros grandes
YAML tiene enteros de precisión arbitraria, pero el valor todavía tiene que sobrevivir a JavaScript por el camino. Un entero por encima de 2^53-1 se escribe aquí como cadena entrecomillada para no perder ningún dígito, y la conversión avisa de que lo ha hecho. Emitir un número redondeado en silencio sería peor.
Ancho de línea
El ajuste de línea está desactivado por defecto. Tradicionalmente, los generadores de YAML parten las cadenas largas a 80 columnas, lo cual está bien para prosa y es horrible para una URL, un blob en base64 o una línea de comandos, porque la forma partida es más difícil de buscar con grep y de editar. La salida sin partir es lo que quiere casi todo el mundo.
How to do this in code
Convertir en código.
py Python
PyYAML ordena las claves por defecto, lo que reordena en silencio un archivo de configuración que estabas intentando convertir con fidelidad.
import json, yaml
data = json.loads(text)
out = yaml.safe_dump(
data,
sort_keys=False, # default is True, which reorders your file
default_flow_style=False,
allow_unicode=True, # otherwise é becomes an escape
width=10**6, # effectively no wrapping
) sh Shell
# yq, the YAML counterpart to jq
yq -P eval . input.json > output.yaml
# Or via Python, with no extra install
python -c 'import sys,json,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)' < in.json js JavaScript
import { dump } from 'js-yaml';
const yaml = dump(JSON.parse(text), {
lineWidth: -1, // no wrapping
noRefs: true, // no anchors and aliases in the output
}); Preguntas frecuentes
- ¿YAML es de verdad un superconjunto de JSON?
- YAML 1.2 lo es, por diseño. Cualquier documento JSON válido es YAML válido. YAML 1.1 no lo era del todo, que es una razón más por la que la versión importa.
- ¿Por qué algunas de mis cadenas salen entrecomilladas?
- Porque sin comillas se parsearían como otra cosa. no, yes, on, off, true, null, un número pelado y cualquier cosa con forma de fecha necesitan comillas para seguir siendo cadenas en al menos algunos parsers de YAML. El generador está siendo cuidadoso en tu nombre.
- ¿Puedo conservar mis comentarios al convertir en el otro sentido?
- No. JSON no tiene sintaxis de comentarios, así que un archivo YAML con comentarios los pierde de camino a JSON, de forma permanente. Es una puerta de un solo sentido que conviene conocer antes de convertir un archivo de configuración que mantienes a mano.