Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

Como convertir JSON a YAML sin el clasico bug 01234

Publicado 2 min de lectura Por Akash Kinkar Pandey

YAML es un lenguaje mucho mas grande que JSON. Todo documento JSON es YAML valido, pero lo contrario no es verdad, lo que significa que un convertidor JSON a YAML puede ser completamente correcto mientras que un convertidor YAML a JSON tiene que rechazar las partes de YAML que JSON no tiene forma de expresar.

Usando el convertidor JSON a YAML

Elige una direccion y un ancho de indentacion, luego presiona Convertir. Al escribir YAML, un mapping se convierte en una clave por linea, un array repite su guion por item, y un null se convierte en una clave sin valor alguno.

El bug contra el que esta herramienta especificamente protege

Un escalar YAML plano que parece un numero, un booleano, o un indicador YAML se lee mal como ese tipo en el momento en que algo parsea el archivo de vuelta. Un codigo postal de 01234 es el caso clasico: escrito sin comillas, un parser YAML lo lee como el numero 1234 y el cero inicial se pierde para siempre. El mismo problema afecta a una cadena que por coincidencia se lee como "true" o "null".

Convirtiendo

{"zip":"01234","active":"true","note":null,"id":12345678901234567890}

produce:

zip: '01234'
active: 'true'
note: null
id: 12345678901234567890

Ambas cadenas de valores estan entrecomilladas especificamente porque dejarlas sin comillas cambiaria su tipo al volver. El null real se escribe sin comillas, ya que esa es la ortografia correcta sin comillas. El id de veinte digitos sobrevive intacto, porque esto va a traves del flujo de tokens en vez de un valor parseado por JSON.parse.

Que acepta el lector y que rechaza

Leyendo YAML de vuelta a JSON, la herramienta entiende un mapping, una secuencia, una cadena entrecomillada, un escalar de bloque, una coleccion de flujo, y un escalar plano plegado. Rechaza anclajes, alias y etiquetas por nombre en vez de ignorarlos silenciosamente, porque YAML no tiene equivalente para aliasing un valor dentro de JSON y pretender lo contrario produciria un documento que solo parece correcto.

Viaje redondo

Convertir el ejemplo de vuelta desde YAML retorna el documento original exacto: "01234" y "true" como cadenas, null como null, y el entero completo de veinte digitos. Ese viaje redondo es la prueba real de si las reglas de comillas de un convertidor son correctas, ya que una regla incorrecta usualmente solo se muestra una vez que conviertes de vuelta y comparas.

Volver a todas las entradas