Ir al contenido
OneKitly

Cómo convertir JSON a CSV: aplanar arreglos de objetos en filas y columnas

Publicado el 18/6/2025 · 4 min de lectura · Herramientas para desarrolladores

Daniel Okonkwo

Daniel OkonkwoDesarrollador front-end y redactor de Tecnología en OneKitly

Rendimiento web · Formatos de archivo

Verificado con 2 fuentes

Ver perfil
En resumen

Para convertir JSON a CSV, parte de un arreglo de objetos. Reúne la unión de todas las claves para formar la fila de encabezado y luego escribe una línea por objeto, leyendo cada campo en el orden de los encabezados. Escapa cualquier valor que contenga una coma, comillas dobles o un salto de línea encerrándolo entre comillas dobles y duplicando las comillas internas. Los objetos y arreglos anidados deben aplanarse primero en columnas con notación de punto, como address.city.

Una guía práctica para convertir un arreglo JSON de objetos en un archivo CSV limpio, incluido el aplanado de campos anidados y los casos límite.

Por qué importa la forma de tu JSON

El CSV es un formato plano y bidimensional: filas y columnas, nada más. El JSON es un árbol que puede anidar objetos dentro de objetos y arreglos dentro de arreglos. El caso limpio para la conversión es un arreglo de objetos de nivel superior, donde cada objeto es una fila y cada clave una columna. Todo lo más profundo debe reestructurarse antes de caber en una cuadrícula.

Como distintos objetos pueden llevar claves distintas, la fila de encabezado debe ser la unión de todas las claves vistas, no solo las del primer objeto. Si solo lees el primer registro, las columnas posteriores desaparecen sin aviso y el archivo queda desalineado.

Aplanar objetos y arreglos anidados

El truco estándar es la notación de punto. Un objeto como {"address":{"city":"Lagos"}} se convierte en una columna llamada address.city con el valor Lagos. El anidamiento puede ser tan profundo como quieras: user.address.city es perfectamente válido. Los arreglos se indexan por posición, así que tags con ["api","web"] se vuelve dos columnas, tags.0 y tags.1.

El aplanado funciona bien cuando los arreglos son cortos y de longitud fija. Cuando un arreglo puede crecer, las columnas indexadas explotan: un registro con cincuenta etiquetas produce cincuenta columnas. En ese caso suele ser más limpio conservar el arreglo como una sola cadena unida, como "api;web;csv", o dividir los datos en una segunda tabla relacionada.

Casos límite que rompen los convertidores ingenuos

El fallo más común son las comillas. Si un valor contiene el delimitador (normalmente una coma), una comilla doble o un salto de línea, debe ir entre comillas dobles, y cualquier comilla doble interna debe duplicarse. Así el valor She said "hi" se convierte en "She said ""hi""". Omitirlo corrompe todas las filas siguientes.

Otras trampas: null frente a cadena vacía (ambos suelen mostrarse como celda vacía), booleanos y números que una hoja de cálculo puede reinterpretar (un código con cero inicial como 007 puede perder sus ceros), y la codificación. Escribe siempre en UTF-8 y considera una marca de orden de bytes inicial si el archivo debe abrirse limpio en hojas de cálculo antiguas.

Conversor de JSON a CSVConvierte un array JSON de objetos en valores separados por comas con una fila de encabezado. Acepta un archivo entero, para que un registro largo no tenga que pasar por el portapapeles.Probar la herramienta

Preguntas frecuentes

¿Y si mi JSON es un único objeto, no un arreglo?
Envuélvelo en un arreglo para obtener un CSV de una fila. Si prefieres cada clave en su propia línea, transpónelo a dos columnas clave,valor.
¿Qué delimitador debo usar, coma o punto y coma?
La coma es el valor por defecto del estándar CSV. Algunas configuraciones regionales de hojas de cálculo esperan un punto y coma; si tus valores ya contienen comas, un punto y coma o una tabulación reduce el escapado.
¿Cómo evito que desaparezcan los ceros iniciales?
Los ceros están en el archivo CSV; la hoja de cálculo los elimina al tratar la columna como número. Importa la columna como texto, o la hoja la reformateará al abrir.
¿Puedo volver a convertir el CSV en JSON?
En parte. Las columnas planas se reconvierten limpio, pero las claves con notación de punto necesitan re-anidarse y el CSV pierde los tipos, así que números y booleanos vuelven como cadenas si no los reanalizas.

Artículos que podrían interesarte

Todas las guías
ExplicacióncamelCase vs snake_case: guía de las convenciones de nombres en el códigocamelCase, snake_case, PascalCase y kebab-case explicados: cómo se ve cada uno, dónde es la convención y cómo elegir uno de forma coherente.ExplicaciónDe CSV a JSON: los cinco casos que rompen cualquier conversorDelimitadores entrecomillados, saltos de línea incrustados, tipos ambiguos, cabeceras duplicadas y codificación. Cada caso se pasó por el conversor y aquí está la salida exacta, incluidos los dos que no salva.ExplicaciónDe XML a JSON: atributos, repetición y la trampa del array de un solo elementoDos documentos que solo se diferencian en cuántos hijos existen producen dos formas JSON distintas, y ningún conversor puede distinguirlos sin un esquema. Además, lo que este hace de verdad con los atributos, el contenido mixto y los espacios, y lo único que sigue sin poder registrar.ComparativaJSON vs XML: ¿cuál es la diferencia?JSON y XML almacenan ambos datos estructurados como texto, pero con compromisos distintos. Aquí tienes cómo se ve cada uno, dónde gana cada uno y cómo elegir.ExplicaciónDe JSON a CSV cuando la estructura está anidada: por qué no hay una respuesta correctaLos mismos dos pedidos salen con cinco columnas de un conversor y diez de otro, y ninguno se equivoca. Rutas con puntos, arrays de escalares, arrays de objetos y registros con claves distintas: cuatro decisiones, tomadas por ti y casi siempre en silencio.ExplicaciónEscapar una cadena para JSON: tres caracteres son obligatorios y uno es una trampaLa RFC 8259 exige escapar exactamente tres cosas dentro de una cadena JSON. Todo lo demás es opcional. El que de verdad rompe canalizaciones es un semisustituto suelto: legal en el texto JSON, imposible en UTF-8 y sustituido en silencio en cuanto tus datos se escriben.

Herramientas relacionadas

Fuentes

¿Has detectado un error en este artículo?