GarToolsPremium Tools
Desarrollo8 de febrero de 20269 min

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

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.
  • structura: CSV vs JSON

    SV

    
    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.).

    SON 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.

    é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
  • étodo 2: JavaScript (navegador o Node.js)

    SV 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));
    

    SON 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');
    }
    

    étodo 3: Python

    Python tiene soporte nativo excelente para ambos formatos:

    SV 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)
    

    SON 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)
    

    on 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')
    

    étodo 4: línea de comandos

    on 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
    

    on Miller (mlr)

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

    roblemas comunes en la conversión

    . Valores con comas

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

    
    nombre,direccion
    Ana,"Calle Mayor, 15"
    

    . Comillas dentro de valores

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

    
    titulo
    "Libro ""El Quijote"""
    

    . 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.

    . 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.

    . 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.

    onclusió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.

    Artículos relacionados

    Volver al blog