Convierte un array de objetos JSON en CSV conforme al RFC 4180. Aplana objetos anidados en columnas con puntos, admite registros incompletos y ofrece delimitadores de coma, punto y coma, tabulacion o barra, ademas de BOM para Excel.
Aplana registros en una hoja de calculo. Pega un array de objetos y obten CSV con fila de cabecera. Los objetos anidados se convierten en nombres de columna con puntos, los campos ausentes quedan vacios y los valores que contienen el delimitador se entrecomillan segun el RFC 4180.
–
Convertir un arbol en una tabla
El desajuste de forma
JSON es un arbol y CSV es un rectangulo, asi que cualquier conversion debe decidir que hacer con las partes del arbol que no encajan. La unica forma que se traduce limpiamente es un array de objetos planos: cada objeto es una fila y cada clave una columna. Todo lo demas necesita una regla.
Los objetos anidados son el caso facil. {"role": {"team": "core"}} se convierte en una columna llamada role.team, lo que mantiene el valor localizable y es algo que entienden casi todos los asistentes de importacion de hojas de calculo. Los arrays anidados son mas dificiles, porque expandirlos cambiaria el numero de filas y duplicaria en silencio los datos que los rodean. Este conversor los mantiene como texto JSON dentro de una sola celda: se pierde capacidad de consulta, pero nunca se inventan registros que no estaban en el origen.
Registros incompletos y orden de columnas
El JSON del mundo real rara vez es uniforme. Un registro tiene nickname y el siguiente no; un campo aparece solo despues de cierta migracion. Un conversor que tomara las columnas unicamente del primer objeto descartaria en silencio todo lo demas.
Aqui la lista de columnas es la union de todas las claves de todos los registros, en orden de primera aparicion. Los registros a los que les falta un campo reciben una celda vacia en lugar de omitirse, asi que el numero de filas siempre coincide con la longitud de la entrada. Se elige el orden de primera aparicion frente al alfabetico porque preserva la agrupacion pretendida por el autor: id y name se quedan al principio en vez de dispersarse.
Comillas, delimitadores y Excel
El RFC 4180 exige entrecomillar un campo si contiene el delimitador, una comilla doble o un salto de linea, y una comilla incrustada se escapa duplicandola. Esta herramienta aplica esa regla a todas las celdas, cabecera incluida, de modo que un valor como Grace, Jr. o una direccion de varias lineas sobrevive a la ida y vuelta por cualquier analizador conforme.
La eleccion del delimitador importa mas de lo que parece. En locales donde la coma es el separador decimal (buena parte de Europa continental) Excel espera un punto y coma, y de lo contrario mete la fila entera en la columna A. La opcion BOM antepone una marca de orden de bytes UTF-8, que es lo que indica a Excel en Windows que lea el archivo como UTF-8 en lugar de la pagina de codigos heredada; sin ella, los nombres no ASCII llegan corruptos. Ambas opciones estan desactivadas por defecto precisamente porque rompen otras herramientas: activalas solo para Excel.
Preguntas frecuentes
¿Que forma de entrada espera?
Un array de objetos, donde cada objeto es una fila. Se acepta un objeto suelto y produce una fila, pero un array de cadenas o numeros no puede convertirse en tabla.
¿Como se tratan los objetos anidados?
Se aplanan en nombres de columna con puntos, de modo que {"role": {"team": "core"}} pasa a ser una columna role.team. Desactiva el aplanado para conservarlos como texto JSON.
¿Por que los arrays anidados quedan como JSON?
Expandirlos cambiaria el numero de filas y duplicaria los campos vecinos. Mantenerlos en una celda garantiza que la salida tiene exactamente tantas filas como registros tenia la entrada.
¿Que ocurre si los registros tienen claves distintas?
La cabecera es la union de todas las claves de todos los registros, en orden de primera aparicion, y cualquier registro al que le falte un campo recibe una celda vacia. No se omite ningun registro.
¿Cuando debo usar la opcion BOM?
Solo para Excel en Windows. La marca de orden de bytes le indica que lea el archivo como UTF-8; sin ella los caracteres no ASCII se leen mal. Otras herramientas pueden mostrar el BOM como caracteres extranos.
¿Por que mi archivo se abre en una sola columna en Excel?
Excel sigue el separador de listas de tu configuracion regional. En locales que usan la coma como decimal espera un punto y coma, asi que cambia el delimitador y vuelve a abrirlo.