JSON vs JSONL: Jaka jest różnica?
Kompletny przewodnik po formatach JSON i JSONL (JSON Lines), ich różnicach i zastosowaniach.
Ostatnia aktualizacja: luty 2026
Szybkie porównanie
| Cecha | JSON | JSONL (JSON Lines) |
|---|---|---|
| Struktura | Pojedynczy obiekt lub tablica | Jeden obiekt JSON na linię |
| Rozszerzenie pliku | .json | .jsonl lub .ndjson |
| Parsowanie | Wymaga sparsowania całego pliku | Może parsować linia po linii |
| Strumieniowanie | Trudne | Natywna obsługa |
| Obsługa dużych plików | Intensywne użycie pamięci | Wydajne użycie pamięci |
| Czytelność dla ludzi | Sformatowany z wcięciami | Kompaktowy, jeden rekord na linię |
| Walidacja schematu | Obsługa JSON Schema | JSON Schema dla każdej linii |
| Dopisywanie danych | Wymaga przepisania całego pliku | Wystarczy dodać nową linię |
Czym jest JSON?
JSON (JavaScript Object Notation) to lekki format wymiany danych, łatwy do odczytania i zapisu przez ludzi oraz łatwy do parsowania i generowania przez maszyny. Oparty jest na podzbiorze JavaScript i stał się de facto standardem wymiany danych w sieci.
Plik JSON zawiera pojedynczą wartość JSON — zwykle obiekt lub tablicę. Cały plik musi być sparsowany jako jedna jednostka, aby uzyskać dostęp do jakichkolwiek danych w nim zawartych.
[{"name": "Alice", "age": 30, "city": "New York"},{"name": "Bob", "age": 25, "city": "London"},{"name": "Charlie", "age": 35, "city": "Tokyo"}]
Czym jest JSONL (JSON Lines)?
JSONL (JSON Lines), znany również jako Newline Delimited JSON (NDJSON), to format tekstowy, w którym każda linia jest prawidłowym obiektem JSON. Linie są oddzielone znakami nowej linii (\n). W przeciwieństwie do standardowego JSON, dane nie są otoczone tablicą ani obiektem.
Każda linia w pliku JSONL jest samodzielna i może być parsowana niezależnie. Dzięki temu JSONL jest idealny do strumieniowania danych, plików logów i przetwarzania dużych zbiorów danych bez ładowania wszystkiego do pamięci.
{"name": "Alice", "age": 30, "city": "New York"}{"name": "Bob", "age": 25, "city": "London"}{"name": "Charlie", "age": 35, "city": "Tokyo"}
Kluczowe różnice między JSON a JSONL
1. Format pliku i struktura
JSON otacza wszystkie dane pojedynczym obiektem lub tablicą. Plik musi być syntaktycznie poprawny jako całość — brakujący nawias na końcu unieważnia cały plik.
JSONL przechowuje jeden obiekt JSON na linię. Każda linia jest niezależna — jeśli jedna linia zawiera błąd, pozostałe linie nadal mogą być sparsowane.
2. Parsowanie i użycie pamięci
JSON wymaga załadowania i sparsowania całego pliku naraz. Plik JSON o rozmiarze 1GB wymagałby około 1GB+ pamięci do sparsowania.
JSONL może być odczytywany i parsowany linia po linii (strumieniowanie). Nawet plik JSONL o rozmiarze 10GB może być przetwarzany przy minimalnym zużyciu pamięci, czytając jedną linię na raz.
3. Strumieniowanie i dane w czasie rzeczywistym
JSON nie jest zaprojektowany do strumieniowania. Nie możesz rozpocząć przetwarzania danych, dopóki cały plik lub odpowiedź nie zostaną odebrane i sparsowane.
JSONL jest idealny do strumieniowania. Każda linia może być przetwarzana natychmiast po odebraniu, co czyni go doskonałym do kanałów danych w czasie rzeczywistym, logów i zdarzeń wysyłanych przez serwer.
4. Dopisywanie i zapisywanie danych
Dopisywanie danych do tablicy JSON wymaga odczytania całego pliku, sparsowania go, dodania nowego elementu i przepisania kompletnego pliku.
Dopisywanie do pliku JSONL jest tak proste, jak dodanie nowej linii na końcu. Nie trzeba odczytywać ani modyfikować istniejących danych. To O(1) vs O(n) dla JSON.
5. Czytelność dla ludzi
JSON obsługuje czytelne formatowanie z wcięciami, co czyni go bardzo czytelnym dla plików konfiguracyjnych i odpowiedzi API.
JSONL jest z założenia kompaktowy — jeden rekord na linię. Jest zoptymalizowany pod kątem przetwarzania maszynowego, choć poszczególne linie mogą być czytelnie sformatowane.
Kiedy używać JSON vs JSONL
- Pracujesz z plikami konfiguracyjnymi
- Budujesz ciała żądań/odpowiedzi REST API
- Przechowujesz małe, strukturalne dane (poniżej 10MB)
- Dane muszą być czytelne i edytowalne przez ludzi
- Pracujesz z zagnieżdżonymi, hierarchicznymi strukturami danych
- Wymiana danych po stronie przeglądarki
- Przetwarzasz duże zbiory danych (100MB+)
- Strumieniujesz dane w czasie rzeczywistym
- Zapisujesz pliki logów i dane zdarzeń
- Trenujesz modele uczenia maszynowego (OpenAI, Hugging Face)
- Potoki ETL i przetwarzanie danych
- Często dopisujesz dane
- Przetwarzasz dane narzędziami Unix (grep, awk, sed)
Typowe zastosowania
Uczenie maszynowe i AI
JSONLJSONL jest standardowym formatem dla danych treningowych ML. OpenAI używa JSONL do zestawów danych do dostrajania, a wiele frameworków ML oczekuje wejścia JSONL. Każda linia reprezentuje jeden przykład treningowy.
Logowanie aplikacji
JSONLLogi serwera, zdarzenia aplikacji i ścieżki audytu naturalnie pasują do JSONL. Każde zdarzenie jest zapisywane jako pojedyncza linia, co ułatwia dopisywanie, wyszukiwanie za pomocą grep i przetwarzanie narzędziami strumieniowymi.
Web API i konfiguracja
JSONREST API zazwyczaj używają JSON dla ciał żądań i odpowiedzi. Pliki konfiguracyjne (.json) używają JSON dla czytelnych, strukturalnych ustawień z zagnieżdżonymi obiektami.
Big Data i analityka
JSONLPotoki danych, procesy ETL i narzędzia analityczne używają JSONL do przetwarzania dużych wolumenów danych. Każdy rekord może być przetwarzany niezależnie, umożliwiając przetwarzanie równoległe i wzorce MapReduce.
Przykłady kodu
// 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));
Konwertuj JSON i JSONL online
Użyj naszych darmowych narzędzi online do natychmiastowej konwersji między formatami JSON i JSONL — bez instalacji.