Conversor JSON Lines (JSONL) ⇔ Array JSON

Convierte entre el formato JSON Lines (un objeto JSON por línea) y un array JSON estándar. Útil para revisar conjuntos de datos de machine learning y salidas de registros.

Consejos de uso

  • JSON Lines (JSONL) es un formato que coloca un objeto JSON independiente por línea, utilizado habitualmente en los conjuntos de datos de fine-tuning de OpenAI y en la salida de registros de herramientas como Elasticsearch/Logstash.
  • En el modo "JSONL → Array JSON", cada línea debe ser un objeto JSON que se pueda analizar por separado. Las líneas en blanco se omiten automáticamente.
  • En el modo "Array JSON → JSONL", toda la entrada debe ser un único array JSON (`[ ... ]`). Cada elemento del array se genera como una línea de JSONL.
  • Al convertir un archivo de registro grande de JSONL a un array JSON, resulta más fácil trabajar con él usando el comando `jq` o el analizador de arrays JSON estándar de tu lenguaje de programación.

Preguntas frecuentes

Un array JSON envuelve todo en un único array, como `[ {...}, {...} ]`, por lo que no se puede acceder a un elemento individual sin analizar el conjunto completo. JSON Lines, en cambio, coloca un objeto JSON independiente por línea, lo que permite procesarlo línea a línea en modo streaming, ideal para procesar de forma secuencial archivos de registro enormes o conjuntos de datos de machine learning.

Es el formato estándar de los conjuntos de datos de fine-tuning en OpenAI y otras plataformas de machine learning, el formato de salida de herramientas de recolección de registros como Elasticsearch y Logstash, y el procesamiento en streaming de grandes volúmenes de datos: cualquier caso en el que se necesite leer y escribir registros de forma independiente, uno a uno.

En el modo "JSONL → Array JSON", cada línea debe ser JSON válido por sí sola; si aunque sea una línea tiene un error de sintaxis, se muestra un mensaje de error indicando ese número de línea. En el modo "Array JSON → JSONL", toda la entrada debe ser un array (que empiece por `[` y termine por `]`).

El resultado convertido a un array JSON se puede usar directamente con el comando `jq` o con el analizador JSON estándar de tu lenguaje de programación. Por el contrario, el resultado convertido a JSONL combina muy bien con `jq -c`, `grep`, `awk` y otras herramientas orientadas a líneas, lo que facilita su integración en un pipeline de análisis de registros.
ツールくん

A propósito — Por qué nació el formato de "un registro por línea"

El formato JSON Lines (también llamado JSONL) surgió porque un array JSON estándar tiene una limitación fundamental: no se puede obtener ni un solo registro hasta que todo el array se ha cargado en memoria y analizado por completo. Intentar tratar como un único array JSON datos de registro o conjuntos de entrenamiento de machine learning de varios millones de líneas obligaba a cargar el archivo entero en memoria, lo que provocaba problemas de falta de memoria y tiempos de análisis desmesurados en archivos muy grandes.

JSON Lines resuelve este problema con una regla sencilla: una línea equivale a un objeto JSON completo. Como el archivo se puede leer y analizar línea a línea a medida que avanza, no hace falta cargarlo entero en memoria, lo que lo hace muy adecuado para el procesamiento en streaming y en paralelo. Esta filosofía de diseño también encaja bien con la tradición Unix de tratar el texto "un registro por línea" (comandos como `grep`, `awk` y `sed` operan línea a línea), lo que supone una gran ventaja práctica al poder integrarse directamente en las herramientas de línea de comandos ya existentes.

Hoy en día se ha adoptado ampliamente como formato de distribución de conjuntos de datos en el ámbito de la IA y el machine learning, y es habitual que los datos de entrenamiento de grandes modelos de lenguaje y los pares de prompt/respuesta para fine-tuning se distribuyan en formato JSON Lines.