Datos

CSV, JSON y YAML

Tres formatos transportan la mayor parte de los datos estructurados del mundo. Convertir entre ellos es fácil; convertir sin corromper algo en silencio requiere un poco de cuidado.

Publicado:

Para qué sirve cada uno

CSV es una tabla: filas y columnas, nada más. Es legible universalmente, diminuto y no puede expresar nada anidado. JSON es un árbol (objetos dentro de matrices dentro de objetos) y es lo que habla casi toda API web. YAML expresa las mismas estructuras que JSON pero con sangría en lugar de llaves, lo que lo hace mucho más agradable de leer y editar para las personas, y es la razón por la que los archivos de configuración se han ido inclinando hacia él.

La trampa de la coerción de tipos

Esta es la que de verdad le cuesta dinero a la gente. Un CSV contiene solo texto: no hay forma de marcar un valor como número, fecha o cadena. Así que los convertidores adivinan, y las suposiciones son con frecuencia erróneas:

  • Un código postal como 01234 se convierte en el número 1234 y pierde el cero inicial.
  • Un código de producto como 1-2 se convierte en una fecha.
  • Un número de cuenta largo pasa a coma flotante y pierde sus últimos dígitos.
  • NA, que significa Norteamérica, se convierte en “no disponible”.

Todos esos casos son silenciosos. Por eso una conversión cuidadosa de CSV a JSON debería dejar cada valor como cadena y dejar que decidas tú, que es lo que hace deliberadamente el convertidor de este sitio, aunque al principio parezca pedante.

Lo que no sobrevive al viaje a CSV

El anidamiento. Una matriz JSON de objetos planos se convierte en una tabla limpia. En cuanto un valor es a su vez un objeto o una matriz, no hay columna donde ponerlo. Las opciones son aplanar con claves compuestas, serializar la parte anidada de vuelta a texto dentro de su celda, o descartarla, y descartarla en silencio es la peor de las tres. Escribirla de vuelta como texto JSON dentro de la celda al menos mantiene los datos recuperables.

Los bordes afilados de YAML

YAML es agradable de leer e inusualmente fácil de hacer mal.

  • La sangría es estructura, y no se permiten tabuladores. Un espacio mal colocado cambia el significado en lugar de causar un error.
  • Algunas palabras sueltas son booleanos. En versiones antiguas de YAML, y, n, on, off, yes y no se interpretan como verdadero o falso, así que una columna de países que contenga NO para Noruega se convierte en false. Ponlas entre comillas.
  • Los comentarios desaparecen al convertir a JSON, porque JSON no tiene forma de representarlos.

Ir y volver no está garantizado

Convertir JSON a YAML y de vuelta normalmente devuelve lo que tenías al principio. Convertir CSV a JSON y de vuelta normalmente no: el estilo de comillas, el orden de las columnas en registros de formas distintas y la representación de los valores vacíos son decisiones, y cada herramienta decide de forma diferente. Si un viaje de ida y vuelta tiene que ser exacto, verifícalo en lugar de darlo por hecho.

Para pasar de uno a otro: convierte CSV a JSON, convierte JSON a CSV o convierte JSON a YAML, y revisa el resultado, ya que la conversión de ida y vuelta no siempre es exacta.