Un JSONL (o JSON Lines) es un formato de archivo en el que cada línea es un objeto JSON independiente. Se usa comúnmente para almacenar y procesar grandes cantidades de datos de forma eficiente, especialmente en tareas de machine learning o procesamiento de lenguaje natural.
📄 Ejemplo de archivo .jsonl
{"texto": "Hola", "traduccion": "Hello"}
{"texto": "¿Cómo estás?", "traduccion": "How are you?"}
{"texto": "Buenos días", "traduccion": "Good morning"}
🔍 ¿En qué se diferencia de un .json?
- JSON estándar: es todo un bloque de datos, por ejemplo un array con muchos objetos.[
{"a": "1"}
{"a": "2"}
] - JSONL: es línea por línea, más fácil de leer en streaming o línea por línea.
{"a": "1"}
{"a": "2"}
✅ ¿Cuándo es útil usar JSONL?
- Datos grandes: JSONL permite procesar línea por línea sin tener que cargar todo el archivo en memoria.
- Entrenamiento con transformers o modelos tipo GPT: Frameworks como OpenAI, Hugging Face, etc., suelen aceptar JSONL para datasets personalizados.
- Etiquetado supervisado: Es cómodo para tareas como clasificación, traducción, resumen, etc.
- Facilita debugging: Podés inspeccionar fácilmente cada ejemplo individual.
❌ ¿Cuándo NO es necesario?
- Si estás trabajando con imágenes, arrays NumPy o datos tabulares, quizás prefieras otros formatos como:
- .csv (para datos tabulares)
- .npy o .npz (para arrays NumPy)
- .tfrecord (en TensorFlow)
- Carpetas con imágenes y etiquetas en .json por separado
📦 ¿Dónde se usa?
- Entrenamiento de modelos como los de OpenAI, Hugging Face, etc.
- Datasets para tareas como traducción, clasificación, preguntas y respuestas, generación de texto, etc.
- Logs estructurados.
🤔 ¿Que pasa si no lo uso?
Si por ejemplo usas un .json con un array gigante:
{objeto 1}
{objeto 2}
{objeto 3}
...
{objeto N}
]Para leer este archivo, la mayoría de las bibliotecas lo cargan entero en memoria. Si tenés, por ejemplo, 10 GB de datos, eso puede consumir toda la RAM y hacer que tu PC se ponga lenta o que se cuelgue.
🔨 ¿Cómo funciona?
Como cada línea es un JSON independiente:
{"input": ..., "output": ...}
{"input": ..., "output": ...}
{"input": ..., "output": ...}
Podés leer el archivo línea por línea, y así procesar solo un lote a la vez sin necesidad de cargar todo el archivo en memoria. A este proceso tambien se lo llama Streaming de Datos.
🧐 Ejemplo
Si quieres entrenar un generador de texto y tienes un .jsonl con 1 millón de ejemplos donde cada ejemplo tiene el formato {"input": ..., "output": ...}, con streaming de datos, podés ir leyendo de a lotes. Simplemente tomas un lote de N ejemplos (en este caso son 32), lo procesas y repites el proceso hasta haber procesado todos los ejemplos.

Conclusiones
JSON Lines es un formato muy práctico, eficiente y flexible para trabajar con grandes volúmenes de registros independientes. No reemplaza a un JSON tradicional cuando se necesita representar estructuras de datos completas en un solo documento, pero es ideal para tareas de procesamiento incremental, streaming y Big Data.
Hemos llegado al final de este artículo. Espero que te halla resultado útil y que hallas disfrutado leyéndolo tanto como yo disfrute escribiéndolo 😁.