JSONL vs NDJSON: Jaka jest różnica?

Kompletny przewodnik porównujący JSONL (JSON Lines) i NDJSON (Newline Delimited JSON) — dwie nazwy dla niemal tego samego formatu, z subtelnymi różnicami wartymi poznania.

Ostatnia aktualizacja: luty 2026

Szybkie porównanie: JSONL vs NDJSON

FunkcjaJSONL (JSON Lines)NDJSON
Pełna nazwaJSON LinesNewline Delimited JSON
Rozszerzenie pliku.jsonl.ndjson
Specyfikacjajsonlines.org (nieformalna)github.com/ndjson/ndjson-spec (nieformalna specyfikacja)
PochodzenieKonwencja społeczności, spopularyzowana przez narzędzia do nauki o danychZaproponowana przez Chrisa Olaha, Thorstena Balla i innych
Separator linii\n (znak nowej linii)\n (znak nowej linii)
Typ MIMEapplication/jsonl (nieoficjalny)application/x-ndjson
Obsługa strumieniowaniaTak, linia po liniiTak, linia po linii
AdopcjaOpenAI, Hugging Face, ekosystem ML/AIElasticsearch, Apache Spark, inżynieria danych

Czym jest JSONL (JSON Lines)?

JSONL, skrót od JSON Lines, to tekstowy format danych, w którym każda linia zawiera pojedynczą prawidłową wartość JSON. Linie są oddzielone znakami nowej linii (\n). Format został spopularyzowany przez społeczności uczenia maszynowego i nauki o danych i jest nieformalnie zdefiniowany na jsonlines.org.

Pliki JSONL używają rozszerzenia .jsonl. Format stał się standardem dla danych treningowych AI i ML — OpenAI wymaga plików .jsonl do dostrajania, a zbiory danych Hugging Face często używają formatu JSON Lines.

data.jsonl
{"id": 1, "text": "Hello world", "label": "greeting"}
{"id": 2, "text": "How are you?", "label": "question"}
{"id": 3, "text": "Goodbye", "label": "farewell"}

Czym jest NDJSON (Newline Delimited JSON)?

NDJSON, czyli Newline Delimited JSON, to format danych, w którym każda linia jest prawidłową wartością JSON oddzieloną znakami nowej linii. Specyfikacja jest hostowana na github.com/ndjson/ndjson-spec i została sformalizowana, aby zapewnić bardziej uporządkowany standard dla danych JSON rozdzielanych liniami.

Pliki NDJSON używają rozszerzenia .ndjson i mają zarejestrowany typ MIME application/x-ndjson. Format jest szeroko stosowany w inżynierii danych, przetwarzaniu logów i aplikacjach strumieniowych — Elasticsearch, Apache Spark i wiele HTTP streaming API używa NDJSON.

data.ndjson
{"id": 1, "text": "Hello world", "label": "greeting"}
{"id": 2, "text": "How are you?", "label": "question"}
{"id": 3, "text": "Goodbye", "label": "farewell"}

Czy JSONL i NDJSON to ten sam format?

W praktyce tak — JSONL i NDJSON są funkcjonalnie identycznymi formatami. Oba przechowują jedną wartość JSON na linię, oddzieloną znakami nowej linii (\n). Plik .jsonl i plik .ndjson z tymi samymi danymi są całkowicie wymienne, a każde narzędzie, które odczytuje jeden format, może odczytać drugi.

Różnice dotyczą wyłącznie nazewnictwa, adopcji społeczności i konwencji metadanych. JSONL (JSON Lines) wyłoniło się ze społeczności nauki o danych i uczenia maszynowego, podczas gdy NDJSON (Newline Delimited JSON) zostało sformalizowane przez społeczność inżynierii danych i strumieniowania internetowego. Pomyśl o tym jak o "film" vs "kino" — to samo, różne preferencje nazw w różnych kręgach.

Najbardziej znacząca różnica to rozszerzenie pliku (.jsonl vs .ndjson) i typ MIME. NDJSON ma bardziej powszechnie rozpoznawany typ MIME (application/x-ndjson), który jest używany w kontekstach strumieniowania HTTP, podczas gdy pliki JSONL są standardem w przepływach pracy AI/ML. Wybierając między nimi, kieruj się konwencją swojego ekosystemu.

Kluczowe różnice między JSONL i NDJSON

1. Specyfikacja i autorytet

JSONL

Zdefiniowane na jsonlines.org ze zwięzłą, nieformalną specyfikacją. Specyfikacja jest prosta: każda linia to prawidłowa wartość JSON, linie są oddzielone '\n', a zalecane jest kodowanie UTF-8.

NDJSON

Zdefiniowane na github.com/ndjson/ndjson-spec z nieco bardziej formalną specyfikacją. NDJSON wyraźnie wymaga, aby każda linia była prawidłową wartością JSON i aby separator linii był '\n' (nie '\r\n'), z zalecanym końcowym znakiem nowej linii.

2. Rozszerzenie pliku

JSONL

Używa rozszerzenia .jsonl. To jest standard dla plików do dostrajania OpenAI, zbiorów danych Hugging Face i większości narzędzi ML/AI. GitHub i VS Code rozpoznają pliki .jsonl z podświetlaniem składni.

NDJSON

Używa rozszerzenia .ndjson. Jest to powszechne w narzędziach inżynierii danych, API zbiorczych Elasticsearch i strumieniowych odpowiedziach HTTP. Wiele edytorów obsługuje również podświetlanie składni .ndjson.

3. Typ MIME

JSONL

Brak oficjalnie zarejestrowanego typu MIME. Typowe nieoficjalne typy to application/jsonl i application/json-lines. W praktyce wiele systemów używa application/jsonl lub wraca do application/json.

NDJSON

Używa application/x-ndjson jako typu MIME. Jest bardziej powszechnie rozpoznawany w kontekstach HTTP i jest używany przez Elasticsearch, standard strumieniowania Fetch API i różne frameworki internetowe dla odpowiedzi strumieniowych.

4. Adopcja społeczności i ekosystemu

JSONL

Dominujący w ekosystemie AI/ML. OpenAI, Anthropic, Google Gemini, Hugging Face i większość frameworków ML używa .jsonl. Termin 'JSONL' jest częściej wyszukiwany i rozpoznawany w społeczności programistów ogólnie.

NDJSON

Preferowany w inżynierii danych i systemach backendowych. Elasticsearch, Apache Spark, PostgreSQL COPY i wiele narzędzi do agregacji logów używa NDJSON. Pakiet npm ndjson ma miliony pobrań tygodniowo.

Kiedy używać JSONL vs NDJSON

JSONLUżywaj .jsonl gdy:
  • Przygotowujesz dane treningowe dla OpenAI, Anthropic lub innych platform dostrajania LLM
  • Pracujesz ze zbiorami danych Hugging Face
  • Budujesz potoki ML i preprocessingu danych
  • Twój zespół lub dokumentacja odnosi się do 'JSON Lines'
  • Przesyłasz pliki na platformy AI/ML, które oczekują rozszerzenia .jsonl
  • Pracujesz w środowiskach nauki o danych Python
NDJSONUżywaj .ndjson gdy:
  • Strumieniujesz dane JSON przez HTTP (Server-Sent Events, fetch streaming)
  • Pracujesz z API zbiorczym Elasticsearch
  • Budujesz potoki danych z Apache Spark lub podobnymi narzędziami
  • Ustawiasz nagłówki Content-Type (application/x-ndjson)
  • Twoja infrastruktura lub zespół używa konwencji NDJSON
  • Pracujesz z bibliotekami strumieniowymi Node.js

Przykłady kodu: Odczyt JSONL i NDJSON

Odczyt pliku .jsonl (Python)
# Odczyt JSONL - dokładnie tak samo jak odczyt NDJSON
import json
with open('data.jsonl', 'r') as f:
for line in f:
record = json.loads(line.strip())
print(record['text'])
# Wyjście:
# Hello world
# How are you?
# Goodbye
Odczyt pliku .ndjson (JavaScript/Node.js)
// Odczyt NDJSON - dokładnie tak samo jak odczyt JSONL
import { createReadStream } from 'fs';
import { createInterface } from 'readline';
const rl = createInterface({
input: createReadStream('data.ndjson')
});
for await (const line of rl) {
const record = JSON.parse(line);
console.log(record.text);
}
// Wyjście:
// Hello world
// How are you?
// Goodbye

Waliduj pliki JSONL / NDJSON

Sprawdź, czy Twój plik .jsonl lub .ndjson jest prawidłowo sformatowany. Nasz darmowy walidator sprawdza każdą linię pod kątem poprawnej składni JSON.

Przeglądaj pliki JSONL i NDJSON natychmiast

Otwieraj pliki .jsonl i .ndjson do 1GB w przeglądarce. Bez przesyłania, bez rejestracji — działa z oboma formatami bezproblemowo.

Najczęściej zadawane pytania

JSONL vs NDJSON — czy to ten sam format? Kluczowe różnice...