JSON vs JSONL: Qual è la differenza?
Una guida completa per comprendere i formati JSON e JSONL (JSON Lines), le loro differenze e quando usare ciascuno.
Ultimo aggiornamento: febbraio 2026
Confronto rapido
| Caratteristica | JSON | JSONL (JSON Lines) |
|---|---|---|
| Struttura | Un singolo oggetto o array | Un oggetto JSON per riga |
| Estensione file | .json | .jsonl o .ndjson |
| Analisi | Deve analizzare l'intero file | Può analizzare riga per riga |
| Streaming | Difficile | Supporto nativo |
| File di grandi dimensioni | Alto consumo di memoria | Efficiente in memoria |
| Leggibilità | Formattato con indentazione | Compatto, un record per riga |
| Validazione schema | JSON Schema supportato | JSON Schema per riga |
| Aggiunta dati | Deve riscrivere l'intero file | Semplicemente aggiungere una nuova riga |
Cos'è JSON?
JSON (JavaScript Object Notation) è un formato leggero di scambio dati che è facile da leggere e scrivere per gli esseri umani e facile da analizzare e generare per le macchine. Si basa su un sottoinsieme di JavaScript ed è diventato lo standard de facto per lo scambio di dati sul web.
Un file JSON contiene un singolo valore JSON — tipicamente un oggetto o un array. L'intero file deve essere analizzato come un'unità per accedere a qualsiasi dato al suo interno.
[{"name": "Alice", "age": 30, "city": "New York"},{"name": "Bob", "age": 25, "city": "London"},{"name": "Charlie", "age": 35, "city": "Tokyo"}]
Cos'è JSONL (JSON Lines)?
JSONL (JSON Lines), noto anche come Newline Delimited JSON (NDJSON), è un formato di testo in cui ogni riga è un oggetto JSON valido. Le righe sono separate da caratteri di nuova riga (\n). A differenza del JSON standard, non c'è un array o un oggetto che avvolge i dati.
Ogni riga in un file JSONL è indipendente e può essere analizzata individualmente. Questo rende JSONL ideale per lo streaming di dati, file di log e l'elaborazione di grandi set di dati senza caricare tutto in memoria.
{"name": "Alice", "age": 30, "city": "New York"}{"name": "Bob", "age": 25, "city": "London"}{"name": "Charlie", "age": 35, "city": "Tokyo"}
Differenze principali tra JSON e JSONL
1. Formato e struttura del file
JSON avvolge tutti i dati in un singolo oggetto o array. Il file deve essere sintatticamente valido nel suo insieme — una parentesi mancante alla fine invalida l'intero file.
JSONL memorizza un oggetto JSON per riga. Ogni riga è indipendente — se una riga ha un errore, le altre righe possono comunque essere analizzate.
2. Analisi e uso della memoria
JSON richiede di caricare e analizzare l'intero file in una volta. Un file JSON da 1 GB richiederebbe circa 1 GB o più di memoria per essere analizzato.
JSONL può essere letto e analizzato riga per riga (streaming). Anche un file JSONL da 10 GB può essere elaborato con un uso minimo della memoria leggendo una riga alla volta.
3. Streaming e dati in tempo reale
JSON non è progettato per lo streaming. Non puoi iniziare a elaborare i dati finché l'intero file o la risposta non è stata ricevuta e analizzata.
JSONL è ideale per lo streaming. Ogni riga può essere elaborata non appena viene ricevuta, rendendolo perfetto per flussi di dati in tempo reale, log ed eventi inviati dal server.
4. Aggiunta e scrittura dei dati
Aggiungere dati a un array JSON richiede la lettura dell'intero file, l'analisi, l'aggiunta del nuovo elemento e la riscrittura del file completo.
Aggiungere dati a un file JSONL è semplice come aggiungere una nuova riga alla fine. Non è necessario leggere o modificare i dati esistenti. Questo è O(1) contro O(n) per JSON.
5. Leggibilità umana
JSON supporta la formattazione con indentazione, rendendolo molto leggibile per file di configurazione e risposte API.
JSONL è compatto per design — un record per riga. È ottimizzato per l'elaborazione automatica piuttosto che per la lettura umana, anche se le singole righe possono essere formattate.
Quando usare JSON vs JSONL
- Lavori con file di configurazione
- Costruisci corpi di richiesta/risposta di API REST
- Memorizzi dati strutturati piccoli (sotto i 10 MB)
- I dati devono essere leggibili e modificabili dagli esseri umani
- Lavori con strutture dati gerarchiche annidate
- Scambi dati lato browser
- Elabori grandi set di dati (oltre 100 MB)
- Trasmetti dati in tempo reale
- Scrivi file di log e dati di eventi
- Addestri modelli di apprendimento automatico (OpenAI, Hugging Face)
- Pipeline ETL ed elaborazione dati
- Aggiungi dati frequentemente
- Elabori dati con strumenti Unix (grep, awk, sed)
Casi d'uso comuni
Apprendimento automatico e IA
JSONLJSONL è il formato standard per i dati di addestramento ML. OpenAI utilizza JSONL per set di dati di fine-tuning, e molti framework ML si aspettano input in JSONL. Ogni riga rappresenta un esempio di addestramento.
Log delle applicazioni
JSONLI log del server, gli eventi dell'applicazione e le tracce di audit sono naturalmente adatti a JSONL. Ogni evento viene scritto come una singola riga, rendendo facile aggiungere, cercare con grep ed elaborare con strumenti di streaming.
API web e configurazione
JSONLe API REST generalmente usano JSON per i corpi di richiesta e risposta. I file di configurazione (.json) usano JSON per impostazioni leggibili e strutturate con oggetti annidati.
Big Data e analisi
JSONLLe pipeline di dati, i processi ETL e gli strumenti di analisi usano JSONL per elaborare grandi volumi di dati. Ogni record può essere elaborato indipendentemente, consentendo elaborazione parallela e pattern MapReduce.
Esempi di codice
// 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));
Converti JSON e JSONL online
Usa i nostri strumenti online gratuiti per convertire istantaneamente tra formati JSON e JSONL — nessuna installazione necessaria.