Czym jest JSONL? Kompletny przewodnik po formacie JSON Lines
Wszystko, co musisz wiedzieć o JSON Lines — składnia, przykłady, zastosowania i najlepsze praktyki.
Ostatnia aktualizacja: luty 2026
Czym jest JSONL?
JSONL (JSON Lines), znany również jako Newline Delimited JSON (NDJSON), to tekstowy format danych, w którym każda linia jest prawidłową wartością JSON, oddzieloną znakami nowej linii. W przeciwieństwie do standardowego JSON, który otacza dane pojedynczą tablicą lub obiektem, JSONL przechowuje jeden rekord na linię.
Ta prosta konstrukcja sprawia, że JSONL jest idealny do strumieniowania, logowania i przetwarzania dużych zbiorów danych — każda linia może być odczytywana, parsowana i przetwarzana niezależnie bez ładowania całego pliku do pamięci.
Format ten został spopularyzowany przez narzędzia i platformy obsługujące ogromne wolumeny danych, w tym OpenAI (do zestawów danych do dostrajania), BigQuery, Apache Spark i systemy zarządzania logami.
Zasady składni JSONL
Format JSONL stosuje kilka prostych zasad:
- Każda linia musi być prawidłową wartością JSON (obiekt, tablica, ciąg, liczba, wartość logiczna lub null)
- Linie są oddzielone znakami nowej linii (\n)
- Brak przecinków ani separatorów między liniami
- Pliki muszą używać kodowania UTF-8
- Końcowy znak nowej linii na końcu pliku jest opcjonalny
- Puste linie są ignorowane przez większość parserów
{"name":"Alice","age":30,"city":"New York"}{"name":"Bob","age":25,"city":"London"}{"name":"Charlie","age":35,"city":"Tokyo"}
Uwaga: Każda linia jest kompletnym, samodzielnym obiektem JSON. Nie ma przecinków między liniami ani otaczającej tablicy.
Przykłady JSONL
{"id":1,"name":"Alice","email":"alice@example.com"}{"id":2,"name":"Bob","email":"bob@example.com"}{"id":3,"name":"Charlie","email":"charlie@example.com"}
{"user":{"name":"Alice","age":30},"scores":[95,87,92]}{"user":{"name":"Bob","age":25},"scores":[88,91,76]}
Linie JSONL nie muszą być tego samego typu — każda linia musi być jedynie prawidłowym JSON:
{"event":"login","user":"alice","timestamp":"2026-01-15T10:30:00Z"}{"event":"purchase","user":"alice","amount":29.99,"items":["book","pen"]}{"event":"logout","user":"alice","timestamp":"2026-01-15T11:45:00Z"}
Jednym z najpopularniejszych zastosowań JSONL są zestawy danych do dostrajania OpenAI:
{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is JSONL?"},{"role":"assistant","content":"JSONL is a text format where each line is a valid JSON value."}]}{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"How do I read a JSONL file?"},{"role":"assistant","content":"Read the file line by line, parsing each line as JSON."}]}
Jak czytać pliki JSONL
Pliki JSONL można czytać dowolnym narzędziem obsługującym przetwarzanie tekstu linia po linii. Oto najczęściej stosowane metody:
Użyj standardowych narzędzi Unix do inspekcji plików JSONL:
# View first 5 lineshead -n 5 data.jsonl# Count total lines (records)wc -l data.jsonl# Pretty-print each line with jqcat data.jsonl | jq .# Filter by field valuecat data.jsonl | jq 'select(.age > 30)'
Wbudowany moduł json w Pythonie naturalnie obsługuje JSONL:
import jsonwith open('data.jsonl', 'r') as f:for line in f:record = json.loads(line)print(record['name'])
Odczyt plików JSONL linia po linii w Node.js:
import { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.jsonl')});for await (const line of rl) {const record = JSON.parse(line);console.log(record.name);}
Jak tworzyć pliki JSONL
Tworzenie plików JSONL jest proste — wystarczy zapisać jedną wartość JSON na linię.
import jsonrecords = [{"name": "Alice", "age": 30},{"name": "Bob", "age": 25},{"name": "Charlie", "age": 35},]with open('output.jsonl', 'w') as f:for record in records:f.write(json.dumps(record) + '\n')
import { writeFileSync } from 'fs';const records = [{ name: 'Alice', age: 30 },{ name: 'Bob', age: 25 },{ name: 'Charlie', age: 35 },];const jsonl = records.map(r => JSON.stringify(r)).join('\n');writeFileSync('output.jsonl', jsonl + '\n');
Czy można dodawać komentarze w JSONL?
Nie. Specyfikacja JSONL nie obsługuje komentarzy. Każda linia w pliku JSONL musi być prawidłową wartością JSON — a sam JSON nie ma składni komentarzy.
Jeśli potrzebujesz dołączyć metadane lub adnotacje do swoich danych, typowe obejścia obejmują:
- 1Dodaj pole metadanych do obiektów JSON: '{'"_comment": "dane testowe", "name": "Alice"'}'
- 2Użyj oddzielnego pliku metadanych obok pliku JSONL
- 3Dodaj metadane jako pierwszą linię pliku: '{'"_meta": '{'"version": "1.0", "created": "2026-01-15"'}''}'
Pamiętaj, że wszelkie pola komentarzy będą parsowane jako zwykłe dane. Aplikacje konsumujące plik JSONL powinny być zaprojektowane tak, aby ignorować pola metadanych.
JSONL vs JSON
Kluczowa różnica polega na strukturze. JSON otacza wszystko pojedynczą wartością, podczas gdy JSONL przechowuje jedną wartość na linię.
[{"name": "Alice", "age": 30},{"name": "Bob", "age": 25}]
{"name":"Alice","age":30}{"name":"Bob","age":25}
- JSON musi być w całości załadowany do pamięci, aby go sparsować; JSONL może być odczytywany linia po linii
- JSON potrzebuje przecinków między elementami; JSONL używa znaków nowej linii
- JSON jest lepszy dla plików konfiguracyjnych i API; JSONL jest lepszy dla dużych zbiorów danych i strumieniowania
- Dopisywanie do JSON wymaga przepisania całego pliku; JSONL po prostu dopisuje nową linię
Aby zobaczyć szczegółowe porównanie, odwiedź nasz kompletny JSON vs JSONL guide.
Typowe zastosowania
Uczenie maszynowe i AI
NajpopularniejszyJSONL jest standardowym formatem dla danych treningowych ML. OpenAI, Hugging Face i inne platformy AI używają JSONL do zestawów danych do dostrajania, ponieważ każdy przykład treningowy jest samodzielną linią, którą można tasować, próbkować i strumieniować wydajnie.
Pliki logów i strumienie zdarzeń
JSONLSystemy logowania strukturalnego (stos ELK, Datadog, CloudWatch) generują logi w formacie JSONL. Każdy wpis logu to jedna linia JSON, co ułatwia dopisywanie nowych wpisów i przetwarzanie logów w czasie rzeczywistym.
Przetwarzanie Big Data
JSONLNarzędzia takie jak Apache Spark, BigQuery i AWS Athena natywnie obsługują JSONL. Format linia po linii umożliwia przetwarzanie równoległe w systemach rozproszonych — każdy worker może przetwarzać fragment linii niezależnie.
Strumieniowe API
JSONLAPI zwracające duże zbiory wyników często używają strumieniowania JSONL. Klient może rozpocząć przetwarzanie wyników natychmiast po ich otrzymaniu, bez czekania na kompletną odpowiedź.
Rozszerzenia plików JSONL
Pliki JSONL zwykle używają tych rozszerzeń:
Wszystkie trzy rozszerzenia zawierają ten sam format — jedna wartość JSON na linię. Typ MIME dla JSONL to application/jsonl lub application/x-ndjson.
Wypróbuj nasze darmowe narzędzia JSONL
Waliduj składnię JSONL, konwertuj między formatami i przeglądaj pliki — wszystko w przeglądarce.