Conversione fra JSON Lines (JSONL) e vettori JSON
Converte in entrambi i sensi fra il formato JSON Lines, che dispone un oggetto JSON per riga, e il consueto vettore JSON. Comodo per gli insiemi di dati dell'apprendimento automatico e per l'esame dei registri.
Che cos'è JSON Lines (JSONL)
JSON Lines è un formato in cui ogni riga contiene un oggetto JSON. Il file nel suo insieme non è JSON, il che significa che non ci sono virgole finali da gestire e che aggiungere record si riduce ad aggiungere righe. È molto usato ovunque i dati scorrano un record alla volta: registri applicativi, insiemi di addestramento per l'apprendimento automatico e caricamenti massivi su BigQuery o Elasticsearch. Le estensioni abituali sono .jsonl e .ndjson.
Questo strumento converte fra JSON Lines e un array JSON in entrambe le direzioni. Passando da JSONL ad array le righe vuote vengono saltate e ogni riga che non sia JSON valido viene segnalata. Nella direzione opposta l'ingresso deve avere un array al livello più esterno, altrimenti la conversione fallisce. Tutto viene eseguito nel vostro browser, quindi registri e dati di addestramento che preferite non inviare altrove restano sulla vostra macchina.
Come convertire fra JSONL e un array JSON
- Scegliete la direzione Da JSONL ad array JSON, oppure da array JSON a JSONL.
-
Incollate i dati
Per JSONL, un oggetto per riga. Per un array, incollate così com'è il testo che inizia con
[. - Se compare un errore, controllate quella riga Il messaggio indica quale riga non è stata interpretata. Una virgola finale o una virgoletta non chiusa sono le cause più comuni.
- Copiate il risultato Salvate l'output in un file oppure passatelo direttamente al passo successivo della vostra catena.
Consigli per sfruttarlo al meglio
- Il formato JSON Lines dispone su ciascuna riga un oggetto JSON indipendente ed è adottato come standard negli insiemi di dati per la messa a punto dei modelli e nelle uscite di registro di piattaforme come Elasticsearch e Logstash.
- Nella modalità che porta da JSONL a vettore, ogni riga deve essere un oggetto JSON analizzabile per conto proprio. Le righe vuote sono saltate automaticamente.
- Nella modalità inversa, l'intera immissione deve costituire un unico vettore JSON, nella forma
[ ... ]; ciascun elemento del vettore è prodotto su una riga di JSONL. - Convertendo in vettore JSON un registro voluminoso in JSONL, lo si potrà trattare più agevolmente con il comando jq o con gli analizzatori JSON standard dei linguaggi di programmazione.
- I numeri sono riprodotti esattamente come erano scritti nell'immissione. Poiché non vengono convertiti in numeri JavaScript, gli ID superiori a 2^53 (9.007.199.254.740.992) e le scritture come
1.0restano invariati prima e dopo la conversione.
Dove questa conversione è utile
Passare i registri a uno strumento di analisi
I registri applicativi scritti un record per riga diventano utilizzabili da strumenti e librerie pensati per gli array, una volta raccolti in un array JSON.
Preparare dati per l'apprendimento automatico
Gli insiemi di addestramento sono spesso distribuiti come JSONL mentre gli script di pre-elaborazione si aspettano un array. Qui lo strumento fa da ponte.
Caricare su BigQuery o Elasticsearch
Entrambi accettano JSON delimitato da ritorni a capo come formato di ingresso, quindi un array già in vostro possesso può essere convertito in qualcosa che riescano ad acquisire.
Rendere un JSON grande trattabile riga per riga
Un array deve essere letto per intero prima che l'elaborazione possa iniziare; come JSONL si può trattare una riga alla volta.
I termini di JSON Lines
- JSON Lines (JSONL)
- Un formato con un valore JSON per riga. Il file nel suo insieme non è JSON valido, perché più valori stanno uno accanto all'altro. Il vantaggio è che ogni riga si può leggere in modo indipendente.
- NDJSON
- Abbreviazione di Newline Delimited JSON, in sostanza la stessa cosa di JSON Lines. L'estensione
.ndjsonderiva da questo nome. - Elaborazione a flusso
- Trattare i dati dall'inizio man mano che arrivano, senza caricarli prima per intero. JSONL si presta a questo approccio, ed è per questo che i due vanno spesso insieme.
- Livello più esterno
- Il valore più esterno di un documento JSON. La conversione verso JSONL richiede qui un array
[...]; un oggetto{...}non può essere convertito. - Righe vuote
- Secondo la specifica JSON Lines (jsonlines.org) una riga vuota non è una riga valida. Questo strumento è tollerante e salta le righe vuote, così la conversione riesce anche con a capo superflui alla fine.
Domande frequenti
[ {...}, {...} ], e non permette di accedere ai singoli elementi prima di averlo analizzato per intero. JSON Lines dispone invece un oggetto indipendente per riga e consente l'elaborazione in flusso continuo, riga per riga: si presta perciò al trattamento sequenziale di registri enormi e di insiemi di dati per l'apprendimento automatico.jq -c e con gli strumenti che lavorano riga per riga, come grep e awk, ed è facile da inserire in una catena di analisi dei registri.
A proposito — perché è nato il formato «un elemento per riga»
Il formato JSON Lines nasce da un limite del consueto vettore JSON: finché non lo si è letto tutto in memoria e analizzato per intero, non se ne può estrarre nemmeno un elemento. Trattando come vettore JSON registri di milioni di righe o insiemi di dati per l'addestramento, occorreva caricare in memoria l'intero file, con problemi di memoria insufficiente e di tempi di analisi crescenti.
JSON Lines risolve la questione con un vincolo semplicissimo: una riga, un oggetto JSON compiuto. Si può leggere il file riga per riga analizzando via via, senza caricarlo tutto in memoria: una caratteristica che si sposa perfettamente con l'elaborazione in flusso continuo e con quella parallela. Questa impostazione si accorda anche con la tradizionale cultura testuale dei sistemi Unix, dove una riga è un elemento e i comandi come grep, awk e sed lavorano riga per riga: da qui il notevole vantaggio pratico di potersi innestare direttamente negli strumenti a riga di comando esistenti.
Oggi il formato è largamente adottato per la distribuzione degli insiemi di dati nel campo dell'intelligenza artificiale: i dati di addestramento dei grandi modelli linguistici e le coppie di richiesta e risposta per la messa a punto sono ormai comunemente distribuiti in JSON Lines.