Saltar al contenido

Conversor de CSV a JSON

Convierte CSV en un array JSON de objetos o JSON en CSV. Detecta el delimitador, aplana JSON anidado y puede añadir BOM para Excel. Sin subir archivos.

0 caracteres · 0 líneas

Si lo desactivas, obtienes un array de arrays.
Los valores con ceros a la izquierda, como 007, se quedan como texto.

0 caracteres · 0 líneas

Los archivos se procesan solo en este dispositivo y nunca se suben a un servidor. Cómo funciona

Conversión bidireccional entre una tabla CSV con columnas a, b y valores 1, 2 y el arreglo JSON equivalente

Cómo se usa

Elige la dirección en las pestañas de arriba (CSV → JSON o JSON → CSV) y pega tus datos en el cuadro de entrada o arrastra un archivo .csv, .tsv, .txt o .json. Al arrastrar un archivo, la dirección cambia sola según su extensión. El resultado se actualiza mientras escribes y puedes llevártelo con el botón de copiar o de descargar. Debajo del resultado aparecen las primeras 10 filas (hasta 30 columnas) en una tabla, para que compruebes de un vistazo que las columnas se han separado bien.

En CSV → JSON eliges si la primera fila es el encabezado (las claves). Si lo activas, obtienes un array de objetos como [{"name":"Kim","age":30}]; si lo desactivas, un array de arrays como [["name","age"],["Kim",30]]. La sangría puede ser de 2 espacios, 4 espacios, un tabulador o en una línea.

La primera conversión CSV → JSON descarga la biblioteca papaparse. JSON → CSV no necesita ninguna biblioteca de conversión adicional.

Reglas del formato CSV (RFC 4180)

CSV tiene muchas variantes, pero la referencia más citada es la RFC 4180, publicada en 2005. Sus reglas principales son:

  • Cada línea es un registro y los campos se separan con comas. La primera línea puede ser un encabezado o no.
  • Si un campo contiene una coma, unas comillas dobles o un salto de línea, todo el campo va entre comillas dobles, por ejemplo "Seoul, Korea".
  • Las comillas dentro de un campo se escriben dos veces: "say ""hi""" significa say "hi".
  • Los espacios forman parte del campo. Los espacios al principio o al final no se eliminan automáticamente.

En JSON → CSV, esta herramienta entrecomilla los campos según estas reglas (y también los que empiezan o acaban con un espacio) y termina las líneas con CRLF, como indica la RFC 4180. En CSV → JSON, si unas comillas no se cierran nunca (los datos acaban en "abc) o hay texto después de las comillas de cierre ("x"y), en lugar del resultado verás el número de línea aproximado. Las filas con un número de campos distinto al del encabezado se convierten igualmente, con un aviso que indica sus números de línea.

Delimitadores distintos de la coma

Pese al nombre, muchos archivos «CSV» no usan comas. Excel guarda los CSV con el separador de listas de la configuración regional de Windows, y en las regiones que usan coma decimal, como Alemania, Francia o España, ese separador es el punto y coma (;), para que no choque con números como 1,5. Las tablas copiadas de una base de datos o de una hoja de cálculo suelen ir separadas por tabuladores (TSV), y en los archivos de registro también se usa la barra vertical (|).

Con el delimitador en «Detectar automáticamente», la herramienta revisa los primeros 20 registros (dentro de los primeros 64 KB de la entrada), cuenta cuántas veces aparecen la coma, el punto y coma, el tabulador y la barra vertical fuera de las comillas, y elige el que tiene un recuento más constante de una línea a otra. El delimitador detectado aparece debajo del selector; si no es el correcto, elígelo tú.

Cómo se convierten los números y true/false

En un CSV, todos los campos son texto. Con «Convertir números y true/false» activado solo cambian dos cosas para que el JSON sea más cómodo de usar: true y false (en mayúsculas o minúsculas) pasan a ser booleanos, y los valores que siguen la sintaxis numérica de JSON pasan a ser números. Todo lo demás se queda como texto. Es el caso de +1, .5, un valor con un espacio delante o detrás y una celda con null o yes. En un archivo cuyo delimitador no es la coma, 1,5 también se queda como texto. Si el delimitador es la coma, un 1,5 sin comillas se divide en dos celdas, 1 y 5, y cada una pasa a ser un número. -5 también pasa a ser un número. Un valor que se lee como notación exponencial, como 1E5, también pasa a ser un número (100000), así que desactiva la opción si tus datos tienen códigos de ese tipo.

Algunos valores se dejan sin tocar a propósito. Los que llevan ceros a la izquierda (código postal 01234, código 007) perderían esos ceros como número, así que se quedan como texto. Un decimal que empieza por un solo 0, como 0.5, sí se convierte en número. Los valores que los números de JavaScript no pueden representar con exactitud, es decir, los enteros mayores que 9007199254740991 (2^53 − 1) y los decimales con más de 15 cifras significativas, también se quedan como texto para que su valor nunca cambie sin avisar. Los campos vacíos pasan a ser una cadena vacía (“”), no null.

Cómo se aplana el JSON anidado en CSV

Un CSV es una tabla plana y no puede guardar JSON anidado tal cual. Esta herramienta lo aplana con estas reglas:

  • Los objetos anidados se convierten en claves con notación de puntos: {"address":{"city":"Seoul"}} → columna address.city
  • Los arrays no se aplanan; van a una celda como texto JSON: ["a","b"]
  • null pasa a ser una celda vacía; un objeto vacío se escribe como {}.
  • Las columnas son todas las claves de todos los objetos, en el orden en que aparecen por primera vez. Si a un objeto le falta una clave, la celda queda vacía.

La entrada habitual es un array de objetos. Un solo objeto se convierte en una tabla de una fila, y en un array de arrays cada array interior pasa tal cual a ser una fila. Si una clave original ya contiene un punto ("a.b"), puede coincidir con una clave aplanada dentro del mismo objeto. Si coinciden, solo queda el valor que está escrito después en ese objeto: con {"a":{"b":1},"a.b":2} la celda a.b contiene 2 y, con las dos claves en el orden contrario, 1.

A cada elemento del array más externo le corresponde siempre una sola fila, contenga lo que contenga. [{"id":1,"items":[{"sku":"A"},{"sku":"B"}]}] produce una única fila bajo el encabezado id,items; si necesitas una fila por cada elemento de items, introduce solo el array interior, [{"sku":"A"},{"sku":"B"}]. Volver a pasar por CSV → JSON un CSV creado así no reconstruye la estructura original: items vuelve como una cadena con ese texto, no como un array, y una columna como address.city sigue siendo una sola clave llamada "address.city", no un objeto anidado.

Tildes, coreano o japonés estropeados en Excel (BOM)

Si abres con doble clic en Excel un CSV guardado en UTF-8, las tildes, la ñ o el texto coreano y japonés pueden verse como caracteres ilegibles. Excel lee el archivo como UTF-8 si empieza por un BOM (Byte Order Mark, en UTF-8 los bytes EF BB BF); si no lo tiene, usa la codificación predeterminada del ordenador. En JSON → CSV, «Añadir BOM UTF-8 para Excel» pone un BOM al principio del archivo que obtienes con el botón de descargar (data.csv, o data.tsv si el delimitador es «Tabulador») y evita el problema. La opción viene activada desde el principio. El texto que te llevas con el botón de copiar nunca incluye el BOM. El BOM solo se añade al archivo descargado, así que el texto del cuadro de resultado no lo lleva ni con la opción activada. Si ya tienes un archivo guardado sin BOM, no hace falta convertirlo otra vez: en lugar de abrirlo con doble clic, impórtalo en Excel con Datos → Desde el texto/CSV.

Unos pocos programas leen el BOM como parte del primer encabezado, así que, si el archivo no va a Excel, es más seguro dejar la opción desactivada. En la dirección contraria, CSV → JSON quita automáticamente el BOM del principio de un archivo o de la entrada.

Fuentes

Preguntas frecuentes

¿Qué pasa con las claves del JSON si en el encabezado se repite un nombre o hay una celda vacía?

No se descarta ninguna columna. Los nombres repetidos reciben _2, _3, etc.; las cabeceras vacías usan column y el número de columna. Con id,name,name, sobre 1,Kim,Lee,x, las claves son id, name, name_2 y column4. Un aviso enumera los nuevos nombres. Las columnas adicionales sin cabecera siguen la misma regla. Para otras claves, modifica la primera línea y convierte de nuevo.

Al cargar un archivo aparece el error «no es un archivo UTF-8».

Basta un solo byte que no sea UTF-8 válido para que se rechace el archivo entero. Así ningún carácter estropeado llega a convertirse, y el cuadro de entrada sigue con lo que ya tenía. Los archivos que Excel guarda como «CSV (delimitado por comas)» suelen quedar en EUC-KR (CP949) en Windows en coreano o en Shift_JIS en Windows en japonés, y provocan este error; vuelve a guardarlos en Excel con Guardar como → «CSV UTF-8 (delimitado por comas)» y cárgalos otra vez. Solo se comprueban los archivos, así que también puedes copiar el contenido desde un programa que lo muestre bien y pegarlo en el cuadro de entrada.

¿Qué pasa con las líneas en blanco en medio de mi CSV?

La opción predeterminada «Omitir líneas vacías» solo excluye las líneas totalmente vacías. Desactivada, una línea vacía se convierte en un registro: con cabeceras a,b tiene dos cadenas vacías y genera un aviso de número de campos. Las líneas con solo un delimitador (,) o espacios permanecen incluso con la opción activada. Las líneas vacías dentro de comillas forman parte del valor; un único salto de línea final no crea otro registro.

En JSON → CSV aparece «Este JSON no se puede convertir en una tabla». ¿Qué tengo que cambiar?

Ese error aparece cuando el valor de nivel superior no es ni un objeto ni un array (por ejemplo, un solo número o una sola cadena) o cuando el primer elemento del array no es ni un objeto ni un array. Es el caso de una simple lista de valores como [1,2,3] o ["a","b"]. Para obtener una fila por valor, mete cada elemento en un array, [[1],[2],[3]], o conviértelos en objetos, [{"v":1},{"v":2},{"v":3}], con lo que se añade el encabezado v. Si el primer elemento es un objeto o un array pero uno posterior es de otro tipo, verás en su lugar «El elemento [1] es de un tipo distinto al primero». Se cuenta desde 0, así que [1] es el segundo elemento, y un null entre objetos, como en [{"a":1},null], también lo provoca. Un array vacío, [], da un resultado vacío sin ningún error.

¿Hay un límite de tamaño? ¿Qué hago con un archivo más grande?

Tanto en CSV → JSON como en JSON → CSV, el límite es de 10 MB: un archivo mayor se rechaza sin leerlo, y con un texto pegado de más de 10 MB solo aparece el error «La entrada es demasiado grande»; no se convierte nada a medias. El tamaño se cuenta en bytes UTF-8, no en caracteres: 1 byte por letra inglesa o cifra, 2 por una letra con tilde o diacrítico, como é o ñ, 3 por carácter coreano o japonés. Divide un CSV grande en varios archivos y conviértelos uno a uno; si tienes marcado «La primera fila es el encabezado», cada trozo debe empezar por esa línea. Un array JSON grande se divide en varios arrays más pequeños.

Software de código abierto utilizado: papaparse (MIT)

Última actualización: