Español

Herramientas de desarrollo · Convertidores de sintaxis

YAML a JSON tipo coerción: cómo sí, no y 0777 cambian de significado

· Cómo funciona

yaml json formatos de datos

YAML tokens escalares que se ramifican en cadenas, números, booleanos y nulos
Ilustración de vector original de ToolAcre

YAML resuelve escalares sin comillas en tipos y las reglas difieren entre YAML 1.1 y 1.2. Esta publicación muestra exactamente cómo un convertidor decide que un valor es booleano, entero, flotante o una cadena, y cómo controlar el resultado.

El valor que resultó ser verdadero: un escalar YAML simple entendido como texto, convertido a JSON como booleano, y el servicio que luego se comportó mal

Un valor como `NO` puede volverse falso en un cargador YAML 1.1, pero eso no es lo que incluye este convertidor. Ambas opciones de ToolAcre utilizan esquemas YAML 1.2, por lo que `NO`, `yes`, `no`, `on` y `off` siguen siendo cadenas. La apertura corregida es importante porque un ejemplo que afirme que este panel convierte `NO` en verdadero o falso enseñaría lo contrario de su comportamiento probado.

Todavía existen sorpresas tipográficas. Según el esquema predeterminado JSON, `null` es nulo mientras que `~`, un valor vacío, y `0o755` siguen siendo cadenas. Al seleccionar Núcleo, esos tres formularios se cambian a nulo, nulo y 493. El resultado es útil precisamente porque expone el valor de JavaScript resuelto, en lugar de pretender que cada token YAML simple tenga un tipo obvio.

El valor que permaneció en el texto bajo YAML 1.2

La resolución implícita se produce mientras js-yaml lee la fuente. El esquema restringido seleccionado decide si un escalar simple coincide con una forma nula, booleana o numérica antes de que el convertidor escriba JSON. Las citas omiten esa decisión: `"0o755"` es texto bajo cualquiera de los esquemas, y un bloque escalar sigue siendo una cadena que incluye los saltos de línea representados por su indicador de masticación.

Esto es análisis y serialización, no un reemplazo de expresiones regulares. El lector construye cadenas, números, valores booleanos, nulos, matrices y objetos; `JSON.stringify` luego emite esos valores con la sangría seleccionada. Los comentarios y la ortografía de los tokens ya han desaparecido en la etapa de escritura, por lo que ningún serializador puede reconstruir si un número era originalmente decimal o estaba escrito en otra notación YAML aceptada.

Las reglas YAML 1.1: sí, /no/on/off booleanos, 0777 como octal, 1:30 como sexagesimal y cadenas de versión como 1.10 leídas como flotantes.

El esquema enumera YAML 1.1 coerciones como el tiempo sexagesimal y el octal heredado. Son riesgos de compatibilidad relevantes, pero no son modos disponibles aquí. ToolAcre intencionalmente no ofrece un esquema 1.1. Su interfaz de usuario dice que ninguna de las opciones enviadas dice `NO` como falsa, y las pruebas fijan ese código de país y las palabras sí, no, activado y desactivado como cadenas.

Ese límite cambia el método de depuración. Si otra aplicación convierte esas palabras en booleanas, compare la configuración de su analizador con ToolAcre en lugar de esperar un resultado idéntico. El convertidor puede mostrar lo que producen sus propios dos esquemas; no puede certificar el esquema o la versión utilizada por un ejecutor, marco o sistema de implementación de CI que luego consume el archivo.

YAML 1.1 las coerciones son peligros que este convertidor evita

El esquema predeterminado JSON acepta solo grafías escalares compatibles con el modelo de JSON. Core agrega las conocidas formas nulas YAML, enteros hexadecimales y octales, Infinity y NaN. El núcleo aún permanece dentro de un cargador restringido: las etiquetas de objetos, fechas, conjuntos, mapas ordenados y etiquetas binarias específicas del idioma se rechazan en lugar de construirse.

Infinity y NaN revelan otro límite. JavaScript puede contenerlos, pero JSON no puede escribirlos. El convertidor identifica cada ruta y advierte que el valor pasa a ser nulo. Se admite que se trata de un paso con pérdidas, no de una conversión sin pérdidas. Un `.inf` entre comillas lo evita porque el valor sigue siendo la cadena literal `.inf`.

Los dos esquemas enviados YAML 1.2 difieren solo en formas escalares documentadas

Pegue `tilde: ~`, `empty:`, `octal: 0o755`, `country: NO` y `answer: yes`. Con estricto seleccionado, los valores JSON son `"~"`, `""`, `"0o755"`, `"NO"` y `"yes"`. Con Core seleccionado, solo los tres primeros cambian: tilde y vacío se vuelven nulos, y octal se convierte en 493. El país y la respuesta permanecen en texto en ambas salidas.

Ahora cite cada valor y repita. Ambos esquemas devuelven cadenas porque la fuente indica el tipo deseado. Esta comparación es precisa en cuanto al código y es más útil que contrastar YAML 1.1 con 1.2 dentro de una herramienta que nunca carga 1.1. También proporciona un dispositivo revisable para comprobar otro analizador sin tener que adivinar únicamente a partir de su documentación.

Ejemplo resuelto: un archivo bajo los esquemas estrictos y básicos de ToolAcre

Las etiquetas estándar explícitas se aceptan solo cuando el esquema restringido las reconoce: `!!str 123` se convierte en la cadena `123`, mientras que `!!int "7"` se convierte en el número 7. Se rechazan etiquetas como `!!binary`, `!!timestamp`, `!!set`, `!!js/function` y constructores de objetos de Python. Esto evita que el lector YAML se convierta en una fábrica de objetos arbitrarios.

Las comillas siguen siendo la opción portátil cuando un valor de configuración simplemente parece escrito. Conserva los ceros a la izquierda, la ortografía de la versión y las palabras centinela sin depender de que una etiqueta explícita sobreviva a otra herramienta. El resultado JSON muestra el tipo elegido, pero no puede llevar el estilo de cita o etiqueta que produjo ese valor.

Lo que esto no cubre: análisis a nivel de aplicación del JSON resultante, que puede obligar a los tipos nuevamente (por ejemplo, cadena '1' a un número)

El código de la aplicación puede forzar nuevamente el JSON resultante. Una API puede leer `"1"` y convertirlo en un número o rechazarlo según un esquema. Los convertidores de sintaxis se detienen después de producir texto JSON; no ejecuta un validador de marco, un cargador de variables de entorno ni una regla comercial. Por lo tanto, una conversión limpia demuestra sintaxis y mapeo, no aceptación por parte del servicio final.

Las claves YAML duplicadas son un tema aparte. ToolAcre mantiene el último valor e informa la clave repetida con una posición. Los flujos de documentos múltiples se convierten en matrices. Esas opciones pueden alterar lo que ve una aplicación incluso cuando se espera cada tipo escalar, así que lea las advertencias en lugar de juzgar solo el cuerpo formateado JSON.

Conclusión: cite cualquier cosa que una máquina pueda leer mal y cómo la conversión de YAML a JSON en el navegador revela exactamente a qué se resolvió cada escalar.

Cita texto que se parezca a un token de máquina y luego inspecciona los tipos JSON. Utilice estricto cuando desee el vocabulario escalar con forma de JSON más pequeño; elija Core deliberadamente cuando se requieran YAML formularios nulos y numéricos. Ninguna de las opciones es YAML 1.1, y ninguna hace que un consumidor intermedio siga las mismas reglas.

El panel hace visible su elección de analizador y devuelve advertencias para valores que ningún objetivo puede representar. Esa es la promesa honesta: revela cómo esta implementación resolvió cada escalar. No afirma un comportamiento YAML universal ni conserva comentarios, etiquetas y ortografía durante un recorrido de ida y vuelta.