Initializing, please wait a moment

CSV vs JSON - cuándo usar cada formato de datos


CSV y JSON son los dos formatos de intercambio de datos que casi toda herramienta del stack moderno habla. CSV es filas y columnas; JSON es objetos y arrays anidados. La división entre ellos es más nítida de lo que parece: CSV es tabular por diseño, y cualquier cosa que lo estire (comas en campos, datos anidados, celdas faltantes) se convierte en un problema de parsing. JSON es estructurado por diseño, y cualquier cosa que lo aplane (un millón de registros de usuario en una sola lista) se convierte en un problema de memoria. Esta guía cubre la mecánica, la realidad de tamaño y velocidad, y las decisiones concretas que determinan qué formato gana para cada caso de uso.


Lo que cada formato realmente es

CSV (valores separados por comas) es un formato de texto plano: un registro por línea, campos separados por un delimitador (coma, tabulación, punto y coma o barra vertical), fila de cabecera opcional, comillas de campo opcionales. No hay una única especificación formal - RFC 4180 codificó el subconjunto común en 2005, pero el CSV del mundo real varía en delimitador, carácter de comilla, reglas de escape, codificación, y si se permiten líneas en blanco.

JSON (JavaScript Object Notation) es un formato estructurado recursivo: objetos (mapas clave-valor), arrays (listas ordenadas), cadenas, números, booleanos y null. La especificación formal es corta (RFC 8259); todo lenguaje moderno trae un parser JSON en la biblioteca estándar; la interoperabilidad es casi universal.


Comparación lado a lado

AtributoCSVJSON
Forma de los datosPlana: filas y columnasAnidada: árboles arbitrarios de objeto/array
TipadoTodo es cadena; tipos numéricos / fecha inferidos en parseString, número, booleano, null nativos; arrays y objetos
Tamaño de archivo (1M registros simples)~60-80 MB~120-180 MB (claves repetidas por registro)
Velocidad de parse (mismos datos)~200-400 MB/s en streaming~80-150 MB/s en streaming (tokenización más estricta)
Amigable al streamingSí - línea por líneaSolo con JSON Lines (un objeto por línea)
EsquemaImplícito vía fila de cabeceraOpcional (JSON Schema) o implícito
Datos anidadosTorpe (aplanar a columnas o incrustar JSON en una celda)Nativo
HerramientasExcel, Numbers, pandas, csvkit, toda base de datosStdlib de todo lenguaje, jq, toda API
Legible por humanosMuy (las columnas se alinean; abre en hoja de cálculo)Sí (si pretty-printed), denso si minificado

Cuándo gana CSV

Datos tabulares con esquema estable. Exportaciones de usuarios desde una base de datos, registros de transacciones, datos censales, vertidos de analítica - cualquier cosa naturalmente en filas y columnas se envía más pequeña y parsea más rápida como CSV.

Idas y vueltas con hoja de cálculo. Si un stakeholder va a abrir el archivo en Excel, Google Sheets o Numbers, CSV es el formato que va y vuelve sin sorpresas. JSON abre en un editor de texto; pocos no-desarrolladores pueden leer un archivo JSON de 5.000 líneas.

Streaming de datasets grandes. Procesar un archivo de 10 GB una fila a la vez es idiomático en CSV: lee una línea, parsea, emite, descarta. JSON Lines logra lo mismo, pero JSON plano (un único array de nivel superior) requiere el archivo entero en memoria para parsearse correctamente.

Cargas a data warehouse. Todo warehouse (BigQuery, Snowflake, Redshift, DuckDB) tiene un cargador CSV optimizado. Los cargadores JSON existen pero son típicamente más lentos por la ambigüedad de forma.


Cuándo gana JSON

Datos anidados o jerárquicos. Un registro de usuario con una lista de pedidos pasados, cada pedido con una lista de líneas de item, cada línea de item con una lista de variantes - JSON expresa esto en un objeto; CSV requiere o desnormalización (una fila por línea de item, cabecera repetida) o strings JSON incrustadas en celdas (lo peor de ambos formatos).

APIs HTTP. Toda API REST y GraphQL en la web moderna devuelve JSON. Es el predeterminado. No devuelvas CSV de una API a menos que el llamador lo pida explícitamente.

Archivos de configuración. Los valores tipados (booleanos, nulls, números) importan en configuración - CSV requeriría parsear cada campo como string y castear, invitando errores de tipo. JSON preserva tipos. YAML preserva tipos y añade comentarios - a menudo la mejor opción para configuración editada por humanos.

Registros heterogéneos. Si tus datos tienen campos opcionales, formas polimórficas, o registros con esquemas diferentes, la libertad de JSON mapea naturalmente; CSV fuerza la unión de todas las columnas con blancos donde un campo está ausente.


El intermedio: JSON Lines (NDJSON)

JSON Lines (también llamado NDJSON) es un objeto JSON por línea de un archivo de texto:

{"user":"alice","age":30,"tags":["admin","paid"]}
{"user":"bob","age":25,"tags":["free"]}
{"user":"carol","age":42,"tags":["paid"]}

Retiene el tipado y anidamiento de JSON mientras permite streaming línea a línea como CSV. La mayoría de herramientas de procesamiento de logs, data warehouses y procesadores de stream lo aceptan nativamente. Elige JSON Lines cuando necesitas la flexibilidad de forma de JSON y la amigabilidad de streaming de CSV.


Trampas comunes al elegir CSV

Comas en campos. Si cualquier campo puede contener una coma (direcciones, descripciones, nombres de producto), el campo debe estar entrecomillado. Los parsers ingenuos split(',') rompen inmediatamente. Usa un parser CSV real (Python csv, Node fast-csv, Go encoding/csv).

Codificación. Excel en Windows usa UTF-16 LE con BOM por defecto; la mayoría de herramientas esperan UTF-8. Siempre especifica la codificación al exportar; añade un BOM UTF-8 si la interoperación con Excel importa.

Formatos de fecha. "2026-04-20" y "04/20/2026" son ambos ambiguos sin región. Prefiere ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ) y documenta la zona horaria. Mira nuestra guía de unix timestamps para la alternativa epoch.

Saltos de línea finales + BOM. Algunos escritores CSV añaden ambos; algunos parsers silenciosamente añaden un registro en blanco o un campo ilegible. Prueba ida y vuelta en una muestra representativa.


Convertir entre formatos

La conversión en el navegador es viable para archivos pequeños a medianos. Para inspección de estructura JSON, nuestro hub de herramientas de desarrollador enlaza a jsonparser, text-diff y minificadores. Para CSV, usa pandas.read_csv / pandas.to_json localmente para archivos > 100 MB; la memoria del navegador limita la conversión a ~500 MB por pestaña en la práctica.


La regla de decisión CSV vs JSON en una oración

Si tus filas caben en una sola línea de cabecera de nombres de columna y un usuario de hoja de cálculo está al menos posiblemente downstream, envía CSV - el formato es el mínimo común denominador de exportación que toda herramienta BI, todo cargador de base de datos, y Excel pueden ingerir sin código. Si cualquier fila necesita objetos anidados, arrays o números / booleanos / nulls tipados preservados a través del ida y vuelta, envía JSON, y cambia a JSON Lines (`.jsonl`) cuando el archivo es lo suficientemente grande como para que un único array de nivel superior obligaría al consumidor a cargar todo el documento en memoria a la vez. Los dos formatos no son intercambiables: CSV pierde tipos y anidamiento a la salida, y JSON gana una dependencia de parser que el equipo de hoja de cálculo puede no tener a la entrada.


Herramientas relacionadas


← Volver a Herramientas para Desarrolladores

Why trust these tools

  • Ten-plus years of web tooling. The freetoolonline editorial team has shipped browser-based utilities since 2015. The goal has never changed: get you to a working output fast, without an install.
  • Truly in-browser - no upload. Every file-processing tool on this site runs in your browser through modern Web APIs (File, FileReader, Canvas, Web Audio, WebGL, Web Workers). Your photo, PDF, audio, or text never leaves your device.
  • No tracking during tool use. Analytics ends at the page view. The actual input you paste, drop, or capture is never sent to any server and never written to any log.
  • Open-source core components. The processing engines underneath (libheif, libde265, pdf-lib, terser, clean-css, ffmpeg.wasm, and others) are public and audit-able. We link to each one in its tool page's footer.
  • Free, with or without ads. All tools are fully functional without sign-up. The Disable Ads button in the header is always available if you need a distraction-free run.