JSON vs JSONL: ¿Cuál es la diferencia?
Una guía completa para entender los formatos JSON y JSONL (JSON Lines), sus diferencias y cuándo usar cada uno.
Última actualización: febrero 2026
Comparación rápida
| Característica | JSON | JSONL (JSON Lines) |
|---|---|---|
| Estructura | Un solo objeto o array | Un objeto JSON por línea |
| Extensión de archivo | .json | .jsonl o .ndjson |
| Análisis | Debe analizar el archivo completo | Puede analizar línea por línea |
| Streaming | Difícil | Soporte nativo |
| Archivos grandes | Alto consumo de memoria | Eficiente en memoria |
| Legibilidad | Formateado con indentación | Compacto, un registro por línea |
| Validación de esquema | JSON Schema compatible | JSON Schema por línea |
| Agregar datos | Debe reescribir el archivo completo | Simplemente agregar una nueva línea |
¿Qué es JSON?
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que es fácil de leer y escribir para los humanos, y fácil de analizar y generar para las máquinas. Se basa en un subconjunto de JavaScript y se ha convertido en el estándar de facto para el intercambio de datos en la web.
Un archivo JSON contiene un solo valor JSON, generalmente un objeto o un array. El archivo completo debe analizarse como una unidad para acceder a cualquier dato dentro de él.
[{"name": "Alice", "age": 30, "city": "New York"},{"name": "Bob", "age": 25, "city": "London"},{"name": "Charlie", "age": 35, "city": "Tokyo"}]
¿Qué es JSONL (JSON Lines)?
JSONL (JSON Lines), también conocido como Newline Delimited JSON (NDJSON), es un formato de texto donde cada línea es un objeto JSON válido. Las líneas están separadas por caracteres de nueva línea (\n). A diferencia del JSON estándar, no hay un array u objeto envolvente alrededor de los datos.
Cada línea en un archivo JSONL es independiente y puede analizarse de forma individual. Esto hace que JSONL sea ideal para streaming de datos, archivos de registro y procesamiento de grandes conjuntos de datos sin cargar todo en memoria.
{"name": "Alice", "age": 30, "city": "New York"}{"name": "Bob", "age": 25, "city": "London"}{"name": "Charlie", "age": 35, "city": "Tokyo"}
Diferencias clave entre JSON y JSONL
1. Formato y estructura del archivo
JSON envuelve todos los datos en un solo objeto o array. El archivo debe ser sintácticamente válido en su totalidad: un corchete faltante al final invalida todo el archivo.
JSONL almacena un objeto JSON por línea. Cada línea es independiente: si una línea tiene un error, las demás líneas aún pueden analizarse.
2. Análisis y uso de memoria
JSON requiere cargar y analizar el archivo completo de una vez. Un archivo JSON de 1 GB necesitaría aproximadamente 1 GB o más de memoria para analizarse.
JSONL puede leerse y analizarse línea por línea (streaming). Incluso un archivo JSONL de 10 GB puede procesarse con un uso mínimo de memoria leyendo una línea a la vez.
3. Streaming y datos en tiempo real
JSON no está diseñado para streaming. No puedes comenzar a procesar datos hasta que se reciba y analice el archivo o la respuesta completa.
JSONL es ideal para streaming. Cada línea puede procesarse tan pronto como se recibe, lo que lo hace perfecto para flujos de datos en tiempo real, registros y eventos enviados por el servidor.
4. Agregar y escribir datos
Agregar datos a un array JSON requiere leer el archivo completo, analizarlo, añadir el nuevo elemento y reescribir el archivo entero.
Agregar datos a un archivo JSONL es tan simple como añadir una nueva línea al final. No es necesario leer ni modificar los datos existentes. Esto es O(1) frente a O(n) para JSON.
5. Legibilidad humana
JSON soporta formato con indentación, lo que lo hace muy legible para archivos de configuración y respuestas de API.
JSONL es compacto por diseño: un registro por línea. Está optimizado para el procesamiento por máquinas más que para la lectura humana, aunque las líneas individuales pueden formatearse.
Cuándo usar JSON vs JSONL
- Trabajas con archivos de configuración
- Construyes cuerpos de solicitud/respuesta de API REST
- Almacenas datos estructurados pequeños (menos de 10 MB)
- Los datos necesitan ser legibles y editables por humanos
- Trabajas con estructuras de datos jerárquicas anidadas
- Intercambio de datos del lado del navegador
- Procesas grandes conjuntos de datos (más de 100 MB)
- Transmites datos en tiempo real
- Escribes archivos de registro y datos de eventos
- Entrenas modelos de aprendizaje automático (OpenAI, Hugging Face)
- Pipelines ETL y procesamiento de datos
- Agregas datos con frecuencia
- Procesas datos con herramientas Unix (grep, awk, sed)
Casos de uso comunes
Aprendizaje automático e IA
JSONLJSONL es el formato estándar para datos de entrenamiento de ML. OpenAI utiliza JSONL para conjuntos de datos de ajuste fino, y muchos frameworks de ML esperan entrada en JSONL. Cada línea representa un ejemplo de entrenamiento.
Registro de aplicaciones
JSONLLos registros de servidor, eventos de aplicación y registros de auditoría se adaptan naturalmente a JSONL. Cada evento se escribe como una sola línea, lo que facilita agregar, buscar con grep y procesar con herramientas de streaming.
APIs web y configuración
JSONLas APIs REST generalmente usan JSON para los cuerpos de solicitud y respuesta. Los archivos de configuración (.json) usan JSON para configuraciones legibles y estructuradas con objetos anidados.
Big Data y analítica
JSONLLos pipelines de datos, procesos ETL y herramientas analíticas usan JSONL para procesar grandes volúmenes de datos. Cada registro puede procesarse de forma independiente, permitiendo procesamiento paralelo y patrones MapReduce.
Ejemplos de código
// Reading JSON - must load entire fileconst data = JSON.parse(fs.readFileSync('data.json', 'utf8'));// Access datadata.forEach(item => {console.log(item.name);});
// Reading JSONL - stream line by lineimport { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.jsonl')});for await (const line of rl) {const item = JSON.parse(line);console.log(item.name);}
// JSON array to JSONLconst jsonArray = JSON.parse(fs.readFileSync('data.json', 'utf8'));const jsonl = jsonArray.map(item => JSON.stringify(item)).join('\n');fs.writeFileSync('data.jsonl', jsonl);
// JSONL to JSON arrayconst lines = fs.readFileSync('data.jsonl', 'utf8').split('\n').filter(line => line.trim());const jsonArray = lines.map(line => JSON.parse(line));fs.writeFileSync('data.json', JSON.stringify(jsonArray, null, 2));
Convertir JSON y JSONL en línea
Usa nuestras herramientas en línea gratuitas para convertir entre formatos JSON y JSONL al instante — sin instalación.