CSV ↔ JSON Converter
Convert between CSV and JSON. Auto-detect delimiter, quote handling, header row toggle. Browser-only.
CSV ↔ JSON Converter
—Runs entirely in your browser. Your input never leaves your device.
What next?
How it works
Por qué coexisten estos dos formatos
JSON es el lenguaje nativo de las APIs y las aplicaciones JavaScript. CSV es el lenguaje nativo de las planillas, las exportaciones de datos y las operaciones masivas de bases de datos. En la práctica, casi toda pipeline de datos cruza esta frontera al menos una vez: exportas una tabla de base de datos a CSV para un analista, o recibes un CSV de un partner y necesitas importarlo a tu API. Esta herramienta maneja esa conversión en ambas direcciones, completamente en el navegador.
CSV es menos estándar de lo que crees
Existe un RFC oficial para CSV — RFC 4180 — pero la mayoría de archivos CSV en la práctica se desvían de él en pequeños detalles.
Delimitadores — La "coma" en CSV no siempre es una coma. Los locales europeos usan comúnmente punto y coma (;) porque la coma es el separador decimal allí. Los tabs (\t) producen TSV (valores separados por tabs), que evita problemas de quoting. La herramienta auto-detecta el delimitador escaneando las primeras líneas.
Finales de línea — RFC 4180 especifica \r\n (CRLF). Los archivos Unix usan \n. Los archivos Windows usan \r\n. Algunos archivos Mac antiguos usaban \r solo. Los parsers necesitan manejar los tres; Papa Parse lo hace.
Quoting — Los campos que contienen el delimitador, un salto de línea o una comilla doble deben estar entre comillas dobles. Una comilla doble literal dentro de un campo entrecomillado se escapa duplicándola: "Dijo ""hola""". Los campos entre comillas simples no son RFC 4180, pero algunas exportaciones de Excel los producen.
Fila de encabezado — RFC 4180 no requiere una fila de encabezado, pero la convención es universal. La herramienta asume que la primera fila es encabezado por defecto; puedes desactivarlo si tu archivo no tiene encabezados, en cuyo caso los nombres de columna se generan automáticamente (col_0, col_1, …).
Quirks de Excel — Excel agrega un BOM (\xEF\xBB\xBF) a los archivos CSV UTF-8. También auto-convierte valores que parecen números o fechas: 1-2 se convierte en 2 de enero, 0001 pierde el cero inicial. Si abres un CSV convertido en Excel y los valores se ven mal, el problema es la auto-conversión de Excel, no el contenido del CSV.
La librería Papa Parse
Esta herramienta usa Papa Parse, el parser CSV de facto estándar para JavaScript. Maneja todos los edge cases de RFC 4180, auto-detecta delimitadores, hace streaming de archivos grandes sin bloquear el hilo del navegador y provee error reporting estructurado para filas malformadas.
Comportamientos clave de Papa Parse que afectan la conversión:
- Inferencia de tipos — Por defecto, Papa Parse convierte
"true"→true,"42"→42,""→null. Esto es normalmente lo que quieres para JSON, pero si necesitas preservar todos los strings, deshabilita el tipado dinámico. - Saltar líneas vacías — Las líneas vacías se saltan por defecto.
- Filas con error — Las filas con número incorrecto de campos se reportan como errores en lugar de saltarse silenciosamente.
Conversión de CSV a JSON
La dirección más común. Cada fila CSV se convierte en un objeto JSON; los encabezados de columna se convierten en claves.
Input CSV:
nombre,email,edad
Alice,[email protected],30
Bob,[email protected],25
Output JSON:
[
{ "nombre": "Alice", "email": "[email protected]", "edad": 30 },
{ "nombre": "Bob", "email": "[email protected]", "edad": 25 }
]
Nota que edad se parsea como número (no el string "30") porque la inferencia de tipos de Papa Parse está activa por defecto.
Conversión de JSON a CSV
Convertir arrays JSON a CSV es directo cuando los objetos son planos. Los objetos anidados requieren aplanamiento.
Objetos planos — Cada clave se convierte en encabezado de columna, los valores en celdas.
Objetos anidados — { "address": { "city": "Buenos Aires", "zip": "1001" } } se aplana en dos columnas: address.city y address.zip. La ruta en notación de puntos se convierte en el encabezado de columna.
Arrays heterogéneos — Si los objetos en el array JSON tienen claves diferentes, la unión de todas las claves se convierte en la fila de encabezado y los valores faltantes producen celdas vacías.
Input JSON:
[
{ "id": 1, "nombre": "Alice", "rol": "admin" },
{ "id": 2, "nombre": "Bob" }
]
Output CSV:
id,nombre,rol
1,Alice,admin
2,Bob,
Escaping: qué pasa con comas y saltos de línea en valores
Si un valor contiene el delimitador, una comilla doble o un salto de línea, debe estar entrecomillado:
"García, Juan","Dijo ""hola""","Línea 1
Línea 2"
La celda del medio contiene una comilla doble escapada (duplicada). La última celda contiene un salto de línea literal dentro del campo entrecomillado — esto es RFC 4180 válido y Papa Parse lo maneja correctamente. Al convertir a JSON, los saltos de línea en celdas se convierten en \n en el valor string.
Manejo de archivos grandes
Papa Parse usa un parser de streaming que procesa el archivo en chunks en lugar de cargar todo el contenido en memoria a la vez. Esto le permite manejar archivos de decenas de megabytes en el navegador sin crashear el tab. Para archivos mayores de ~50 MB, un enfoque server-side o Node.js es más apropiado:
import Papa from 'papaparse'
import fs from 'fs'
Papa.parse(fs.createReadStream('large.csv'), {
header: true,
step: (row) => {
// Procesar una fila a la vez — uso de memoria constante
processRow(row.data)
},
complete: () => console.log('Listo')
})
Privacidad
Todo el parsing y la conversión se ejecutan en tu navegador usando Papa Parse. Tus datos CSV y JSON nunca se suben a nuestros servidores.
FAQ
Mi CSV usa punto y coma en lugar de comas. ¿Funcionará?
Sí. La herramienta auto-detecta el delimitador escaneando las primeras líneas de tu input. Los punto y coma, tabs, pipes (|) y comas se detectan automáticamente. Si la detección falla (archivos muy cortos o delimitadores inusuales), puedes especificar el delimitador manualmente en el panel de opciones.
¿Por qué mis números aparecen como strings en el output JSON?
El tipado dinámico está deshabilitado en tu configuración actual. Habilita "Dynamic typing" para que Papa Parse convierta automáticamente "42" a 42, "3.14" a 3.14, y "true" a true. Si necesitas todos los valores como strings — por ejemplo, para preservar ceros iniciales en IDs como "0042" — mantén el tipado dinámico desactivado.
¿Qué pasa con los objetos JSON anidados al convertir a CSV?
Los objetos anidados se aplanan usando claves en notación de puntos. { "user": { "name": "Alice", "city": "Bogotá" } } se convierte en dos columnas: user.name y user.city. Los arrays de primitivos dentro de un objeto se unen con punto y coma en un único valor de celda. Las estructuras muy anidadas pueden producir CSVs anchos con encabezados de columna largos — esta es una limitación fundamental del formato CSV plano.
¿Por qué mi CSV se ve mal cuando lo abro en Excel después de convertir?
Excel aplica auto-conversión al abrir archivos CSV: valores que parecen fechas (1-2, Jan-2024), números con ceros iniciales (0042) y triggers de notación científica (1E10) se transforman. Este es el comportamiento de Excel, no un fallo en el CSV. Para evitarlo, importa el CSV con el asistente "Obtener datos" de Excel y establece los tipos de columna explícitamente, o guarda directamente como XLSX.
¿Puedo convertir un CSV sin fila de encabezado?
Sí. Desactiva "La primera fila es encabezado" en las opciones. La herramienta genera nombres de columna automáticamente (col_0, col_1, col_2, …). Puedes renombrarlos después de la conversión si es necesario.
¿Cómo maneja la herramienta las celdas con comas o saltos de línea dentro?
Siguiendo RFC 4180, esas celdas deben estar entre comillas dobles en el CSV. El parser de la herramienta (Papa Parse) lo maneja correctamente — "Buenos Aires, Argentina" es un único valor de celda Buenos Aires, Argentina, no dos celdas. Los saltos de línea dentro de celdas entrecomilladas se preservan como \n en el valor string JSON. Si tu CSV no está correctamente entrecomillado alrededor de esos valores, el parse probablemente dará error en esas filas.
¿Cuál es el archivo más grande que puedo convertir en el navegador?
Papa Parse hace streaming del archivo en chunks, por lo que el uso de memoria se mantiene prácticamente constante independientemente del tamaño del archivo. En la práctica, archivos de hasta ~50 MB se convierten sin problemas. Por encima de eso, el paso de serialización JSON puede generar picos de memoria. Para archivos muy grandes, usa Papa Parse en un script Node.js con output en streaming.
El output JSON-to-CSV tiene columnas vacías extra para algunas filas. ¿Por qué?
Tu array JSON tiene objetos con claves inconsistentes — algunos objetos tienen campos que otros no tienen. El conversor usa la unión de todas las claves como fila de encabezado y rellena los valores faltantes con strings vacíos. Este es el comportamiento correcto para datos heterogéneos. Si no quieres las columnas vacías, filtra tu JSON a un esquema consistente antes de convertir.