GarToolsPremium Tools
Desarrollo

Cómo convertir CSV a JSON (y viceversa): guía para desarrolladores

Aprende a convertir entre CSV y JSON paso a paso. Métodos manuales, herramientas online y scripts en JavaScript, Python y línea de comandos.

Por Ferran Garola Bonilla8 min de lectura
Imagen ilustrativa del artículo: Cómo convertir CSV a JSON (y viceversa): guía para desarrolladores
Compartir

¿Por qué necesitas convertir entre CSV y JSON?

CSV (Comma-Separated Values) y JSON (JavaScript Object Notation) son los dos formatos de intercambio de datos más utilizados en el mundo. Aunque ambos representan datos estructurados, cada uno tiene ventajas en contextos diferentes, y la necesidad de convertir entre ellos surge constantemente en flujos de trabajo reales:

  • Importar datos de Excel/hojas de cálculo a una API: las exportaciones suelen ser CSV, pero las APIs esperan JSON.
  • Alimentar una base de datos NoSQL: MongoDB, Firebase y similares trabajan con documentos JSON, no con filas CSV.
  • Migrar datos entre sistemas: un sistema legacy exporta CSV, el nuevo sistema consume JSON.
  • Analizar datos de una API en una hoja de cálculo: la API devuelve JSON, Excel necesita CSV.
  • Generar fixtures de prueba: los datos de test se mantienen en CSV por legibilidad, pero el código de test necesita JSON.

Estructura: CSV vs JSON

CSV

nombre,edad,ciudad
Ana,28,Madrid
Pedro,35,Barcelona
Laura,42,Valencia

Cada línea es un registro. La primera línea (opcional) define los nombres de columna. Los valores se separan por comas (o punto y coma, tabulador, etc.).

JSON equivalente

[
  { "nombre": "Ana", "edad": "28", "ciudad": "Madrid" },
  { "nombre": "Pedro", "edad": "35", "ciudad": "Barcelona" },
  { "nombre": "Laura", "edad": "42", "ciudad": "Valencia" }
]

Un array de objetos donde cada fila del CSV es un objeto y cada columna es una clave.

Método 1: herramientas online

La forma más rápida si necesitas una conversión puntual. Nuestro conversor CSV a JSON y conversor JSON a CSV funcionan directamente en tu navegador: pega los datos, obtén el resultado. Sin servidores, sin uploads, privacidad total.

Ventajas de las herramientas online:

  • No necesitas instalar nada
  • Funcionan desde cualquier dispositivo
  • Manejo automático de caracteres especiales y encoding
  • Previsualización del resultado antes de copiar

Método 2: JavaScript (navegador o Node.js)

CSV a JSON

function csvToJson(csv, separator = ',') {
  const lines = csv.trim().split('\n');
  const headers = lines[0].split(separator).map(h => h.trim());

  return lines.slice(1).map(line => {
    const values = line.split(separator);
    return headers.reduce((obj, header, i) => {
      obj[header] = values[i]?.trim() ?? '';
      return obj;
    }, {});
  });
}

// Uso
const csv = `nombre,edad,ciudad
Ana,28,Madrid
Pedro,35,Barcelona`;

const json = csvToJson(csv);
console.log(JSON.stringify(json, null, 2));

JSON a CSV

function jsonToCsv(data, separator = ',') {
  if (!data.length) return '';
  const headers = Object.keys(data[0]);
  const rows = data.map(obj =>
    headers.map(h => {
      const val = String(obj[h] ?? '');
      // Escapar valores con comas o comillas
      return val.includes(separator) || val.includes('"')
        ? `"${val.replace(/"/g, '""')}"`
        : val;
    }).join(separator)
  );
  return [headers.join(separator), ...rows].join('\n');
}

Método 3: Python

Python tiene soporte nativo excelente para ambos formatos:

CSV a JSON

import csv
import json

with open('datos.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    data = list(reader)

with open('datos.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

JSON a CSV

import csv
import json

with open('datos.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

with open('datos.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

Con pandas (para datasets grandes)

import pandas as pd

# CSV a JSON
df = pd.read_csv('datos.csv')
df.to_json('datos.json', orient='records', force_ascii=False, indent=2)

# JSON a CSV
df = pd.read_json('datos.json')
df.to_csv('datos.csv', index=False, encoding='utf-8')

Método 4: línea de comandos

Con jq (procesador JSON de terminal)

# JSON a CSV con jq
jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' datos.json > datos.csv

# Instalar jq:
# macOS: brew install jq
# Linux: apt install jq / yum install jq
# Windows: choco install jq

Con Miller (mlr)

# CSV a JSON
mlr --icsv --ojson cat datos.csv > datos.json

# JSON a CSV
mlr --ijson --ocsv cat datos.json > datos.csv

Problemas comunes en la conversión

1. Valores con comas

Si un campo CSV contiene comas, debe estar envuelto en comillas dobles:

nombre,direccion
Ana,"Calle Mayor, 15"

2. Comillas dentro de valores

Las comillas dobles dentro de un campo entrecomillado se escapan duplicándolas:

titulo
"Libro ""El Quijote"""

3. Encoding y caracteres especiales

CSV no tiene un estándar universal para encoding. Asume UTF-8, pero archivos de Excel en español suelen usar Windows-1252. Si ves caracteres extraños (ñ, á), es un problema de encoding.

4. Tipos de datos

CSV es puro texto: "28" y 28 son iguales. Al convertir a JSON, debes decidir si los valores numéricos deben ser strings o números. Nuestro conversor detecta automáticamente números y booleanos.

5. Separador incorrecto

No todo CSV usa comas. En España y otros países europeos, el separador estándar de Excel es punto y coma (;) porque la coma se usa como separador decimal.

Conversiones avanzadas: JSON anidado a CSV plano

El caso mas complejo de conversion es transformar JSON con estructura jerarquica (objetos anidados, arrays dentro de objetos) a CSV, que es inherentemente plano. Existen varias estrategias para manejar esta situacion.

Aplanamiento con prefijos: cada nivel de anidamiento se representa con un punto en el nombre de la columna. Por ejemplo, un objeto con "direccion.calle" y "direccion.ciudad" se convierte en dos columnas separadas. Esta estrategia funciona bien para estructuras de profundidad fija y conocida.

Expansion de arrays: si un registro tiene un array de valores (por ejemplo, un usuario con multiples roles), puedes crear una fila por cada combinacion de registro y valor del array, o concatenar los valores del array en una sola celda separados por un delimitador secundario. La primera opcion genera filas duplicadas pero mantiene la estructura tabular pura. La segunda es mas compacta pero requiere parsing adicional al leer el CSV.

Serializacion JSON en celdas: para campos complejos que no se pueden aplanar razonablemente, una opcion pragmatica es serializar el subobjeto como un string JSON dentro de una celda CSV. Esto preserva toda la informacion pero requiere que el consumidor del CSV sepa parsear esas celdas.

Rendimiento en conversiones grandes

Para datasets con millones de registros, el rendimiento de la conversion importa. En JavaScript del navegador, la limitacion principal es la memoria: un JSON de 100 MB puede consumir varios cientos de megabytes de RAM al parsearse. Para estos casos, usa herramientas de streaming que procesan el archivo linea por linea en lugar de cargarlo completo en memoria.

En Python, pandas es significativamente mas rapido que las librerias estandar csv y json para datasets grandes gracias a sus optimizaciones internas en C. Para archivos enormes (gigabytes), considera herramientas especializadas como Dask o PySpark que pueden procesar datos que no caben en la memoria de una sola maquina.

En linea de comandos, jq y Miller son extremadamente eficientes porque trabajan en modo streaming por defecto. Miller en particular esta diseñado especificamente para transformaciones de datos tabulares y maneja millones de registros en segundos.

Validacion de datos despues de la conversion

La conversion entre formatos puede introducir errores sutiles que es importante detectar. Despues de convertir CSV a JSON, verifica que el numero de registros coincide, que los tipos de datos son correctos (numeros como numeros, no como strings) y que los campos con caracteres especiales (acentos, comillas, saltos de linea) se preservaron correctamente.

Para conversiones criticas en produccion, implementa validacion automatica con tests que comparen el conteo de registros y la integridad de campos clave entre el archivo original y el convertido. Un simple script que cuente registros, verifique campos no nulos y compare sumas de control (checksums) de campos numericos puede detectar la mayoria de problemas de conversion.

Las herramientas de GarTools muestran una previsualizacion del resultado antes de descargar, lo que te permite verificar visualmente que la conversion es correcta para conversiones puntuales sin necesidad de escribir tests.

Casos de uso especificos por industria

En ciencia de datos, la conversion CSV a JSON es frecuente cuando necesitas alimentar APIs de machine learning o visualizacion con datos que originalmente estan en hojas de calculo. En el sector financiero, los extractos bancarios y reportes regulatorios suelen distribuirse en CSV y necesitan convertirse a JSON para integraciones con sistemas modernos de contabilidad o dashboards.

En marketing digital, las exportaciones de Google Analytics, Google Ads y herramientas de SEO vienen tipicamente en CSV. Convertirlas a JSON facilita la creacion de dashboards personalizados, la integracion con herramientas de automatizacion y el analisis con scripts de Python o R.

En desarrollo web, la conversion JSON a CSV es habitual cuando necesitas compartir datos de APIs con equipos no tecnicos que prefieren trabajar con hojas de calculo. Un export de usuarios, pedidos o metricas de un backend JSON a un CSV legible por Excel es una funcionalidad comun en paneles de administracion. Implementar un boton de "Exportar a CSV" en tu dashboard es una mejora de usabilidad que los usuarios no tecnicos agradecen enormemente.

Conclusión

Convertir entre CSV y JSON es una tarea cotidiana en desarrollo. Para conversiones puntuales, usa nuestros conversores online (CSV a JSON, JSON a CSV) que funcionan al instante en tu navegador. Para automatización, JavaScript y Python ofrecen soluciones elegantes con pocas líneas de código.

¿Te ha sido útil este artículo?

Suscríbete a la newsletter mensual: un correo cuando publicamos algo igual de útil. Sin spam.

¿Te ha gustado?
Compártelo con alguien a quien le pueda ser útil.

Los comentarios se activarán próximamente. ¿Quieres compartir algo sobre este artículo? Escríbenos en /contacto.

Continuar leyendo
Volver al blog