Форматы · Данные

Что такое JSONL (JSON Lines) и чем он отличается от обычного JSON

Скачали датасет для обучения ИИ-модели, выгрузили лог сервиса или экспортировали данные из Elasticsearch — и получили файл с расширением .jsonl, который обычный JSON-валидатор открывать отказывается? Это не сломанный JSON, а отдельный формат со своими правилами. Разбираем, что такое JSONL (JSON Lines), чем он принципиально отличается от обычного JSON, где он реально применяется и как его открыть, посмотреть и провалидировать. Если вам нужен не построчный JSONL, а обычный одиночный JSON-файл — смотрите отдельный разбор чем открыть JSON-файл.

Коротко: JSONL (JSON Lines) — это текстовый формат, где каждая строка файла представляет собой отдельный, самостоятельный JSON-объект без общих скобок и запятых между строками. Такой файл можно читать построчно, не загружая целиком в память, поэтому его используют для логов, больших датасетов и обучающих данных ИИ-моделей (например, в fine-tuning OpenAI).

Опубликовано: 17 октября 2026 Редакция Loadfile Чтение 9 мин
Содержание
  1. Что такое JSONL (JSON Lines)
  2. Чем JSONL отличается от обычного JSON
  3. Как устроена строка JSONL
  4. Зачем нужен именно построчный формат
  5. Где используется JSONL на практике
  6. Как открыть и посмотреть файл .jsonl
  7. Как создать или сконвертировать JSONL
  8. Частые ошибки при работе с JSONL
  9. Частые вопросы

Что такое JSONL (JSON Lines)

JSONL (JSON Lines, он же NDJSON — newline-delimited JSON) — это текстовый формат хранения данных, в котором каждая строка файла является отдельным, полностью валидным значением JSON. Строки не обёрнуты в общий массив [...] и не разделены запятыми, как элементы обычного JSON-массива, — каждая живёт сама по себе.

Файл кодируется в UTF-8, а строки разделяются обычным символом перевода строки \n. Расширение файла обычно .jsonl, но встречается и .ndjson — оба обозначают один и тот же принцип построчного JSON, просто разные проекты исторически выбрали разные имена.

Чем JSONL отличается от обычного JSON

Обычный файл .json — это один документ: единственный объект {...} или массив [...], который нужно разобрать целиком, прежде чем из него можно что-то достать. JSONL устроен принципиально иначе — это набор независимых записей, выстроенных одна под другой.

ПризнакJSONJSONL
СтруктураОдин документ: объект или массивМного независимых строк-записей
Валидность как единое целоеВесь файл — один валидный JSON-документФайл целиком НЕ является одним JSON-документом
Устойчивость к повреждениюОдна ошибка синтаксиса ломает разбор всего файлаПовреждена одна строка — остальные разбираются независимо
Чтение из памятиНужно загрузить весь файл, прежде чем начать разборМожно читать и обрабатывать по одной строке подряд

Можно ли открыть .jsonl как обычный JSON (и почему нет)

Нет — если скормить файл .jsonl целиком обычному JSON-валидатору или парсеру, он вернёт ошибку. Причина в самой структуре: валидатор ожидает один документ, а видит несколько отдельных JSON-значений подряд без общей обёртки. Это не повреждённый файл и не ошибка экспорта — так формат и задуман. Чтобы прочитать JSONL правильно, нужно разбирать его построчно: каждую строку — отдельным вызовом JSON-парсера.

i
Как быстро отличить JSONL от обычного JSON на глаз

Откройте файл в текстовом редакторе. Если первая строка начинается с { и заканчивается на }, а на следующей строке снова начинается с { — это JSONL. Если весь файл — это один большой объект или массив, растянутый на много строк из-за форматирования, — это обычный JSON.

Как устроена строка JSONL

У формата всего три правила, и все они простые:

  • Кодировка файла — UTF-8.
  • На каждой строке — ровно одна JSON-запись (чаще всего объект).
  • Строки разделяются символом перевода строки \n, без запятых между ними.

Пример файла из трёх строк с данными о пользователях:

{"id": 1, "name": "Анна", "role": "editor"} {"id": 2, "name": "Игорь", "role": "admin"} {"id": 3, "name": "Мария", "role": "viewer"}

Каждая строка здесь — самостоятельный, полностью корректный JSON-объект. Обычным JSON-массивом с теми же данными был бы один документ вида [{...}, {...}, {...}] — с квадратными скобками снаружи и запятыми между объектами.

Зачем нужен именно построчный формат

Главное практическое преимущество JSONL — потоковая обработка. Обычный JSON требует загрузить весь файл в память, прежде чем парсер сможет вернуть хотя бы одну запись: пока не закрылась последняя скобка документа, разбор не завершён. JSONL читается иначе — построчно, с постоянным расходом памяти: можно обрабатывать файлы в десятки гигабайт, не загружая их целиком в оперативную память.

Отсюда и второе преимущество — независимость строк. Если одна строка в середине файла повреждена или обрезана, остальные всё равно разбираются парсером без проблем: сбой локализован, а не роняет чтение всего файла, как это бывает с единым JSON-документом.

Где используется JSONL на практике

JSONL — не нишевый формат «для энтузиастов»: он встроен в несколько распространённых систем именно потому, что потоковая построчная обработка там нужна по делу.

Датасеты и fine-tuning ИИ-моделей (OpenAI, Hugging Face)

JSONL — единственный поддерживаемый формат обучающих датасетов для fine-tuning и Batch API OpenAI: каждая строка файла — отдельный пример для обучения, обычно объект с полем messages. Такая построчная структура удобна и для подготовки датасета (можно добавлять примеры по одному, не пересобирая весь файл), и для его проверки. JSONL — один из стандартных форматов и для построчных датасетов на платформах вроде Hugging Face.

Логи приложений и потоковые данные

Системы логирования часто пишут события построчно — каждое новое событие дописывается в конец файла отдельной строкой, без необходимости переписывать уже записанные данные. Это естественно ложится на структуру JSONL и упрощает потоковую передачу логов между сервисами.

Bulk-операции в базах и поисковых системах (Elasticsearch)

Bulk API Elasticsearch принимает тело запроса именно в формате NDJSON: чередующиеся строки с действием/метаданными и строки с самими данными, тип содержимого application/x-ndjson или application/json, а финальная строка обязана заканчиваться переводом строки. При этом JSON внутри строк не должен быть pretty-printed — иначе построчный парсер Bulk API собьётся.

Как открыть и посмотреть файл .jsonl

  1. Текстовый редактор или IDE. Откройте файл .jsonl в любом текстовом редакторе или коде-редакторе (VS Code, Sublime Text, Notepad++) — он покажет построчно, где каждая строка — отдельная JSON-запись. Для удобного просмотра можно включить подсветку синтаксиса JSON.
  2. Онлайн-вьюер JSONL. Если нужно быстро посмотреть структуру без установки программ, подойдёт специализированный онлайн-вьюер для JSONL — обычные онлайн-валидаторы JSON для этого не годятся, им нужен один документ, а не набор строк.
  3. Проверить реальный формат файла. Если расширение потерялось или вы не уверены, что перед вами действительно JSONL, а не что-то другое, — посмотрите сигнатуру файла инструментом «Определить формат файла».
  4. Провалидировать построчно. Чтобы убедиться, что файл корректен, проверяйте каждую строку отдельным JSON-валидатором, а не весь файл целиком — именно так JSONL и задуман (см. раздел выше).

Как создать или сконвертировать JSONL

Превратить обычный JSON-массив в JSONL несложно: нужно разложить каждый элемент массива в отдельную строку файла, убрав внешние квадратные скобки и запятые между объектами. Обратное преобразование — из JSONL в JSON-массив — делается так же: строки оборачиваются в [...] и разделяются запятыми.

Если под рукой оказался файл без расширения и непонятно, JSONL это, обычный JSON или что-то совсем другое, — структуру и формат содержимого проще всего установить через гайд как определить формат файла без расширения или тот же инструмент «Определить формат файла» выше.

Частые ошибки при работе с JSONL

!
На что обратить внимание при генерации своего .jsonl

Попытка провалидировать весь файл как единый JSON — валидатор ожидает один документ и сразу вернёт ошибку синтаксиса, хотя с самими данными всё в порядке; проверяйте построчно.

Pretty-print внутри строк — если каждый JSON-объект отформатирован с переносами строк внутри себя, построчные парсеры (например, Bulk API Elasticsearch) перестают понимать, где заканчивается одна запись и начинается следующая. Каждая запись должна умещаться в одну строку.

Кодировка, отличная от UTF-8 — формат предполагает UTF-8; файл, сохранённый в другой кодировке, может содержать нечитаемые символы и ломать парсинг строк с не-ASCII текстом.

Лишние пустые строки — пустая строка — не валидный JSON-объект, и некоторые парсеры споткнутся об неё при построчном чтении, особенно в конце файла.

Частые вопросы

Чем отличается JSONL от NDJSON?

По сути ничем — это два названия одного и того же принципа построчного JSON (newline-delimited JSON). Расширение файла при этом может быть и .jsonl, и .ndjson — выбор зависит от конкретного инструмента или проекта.

Можно ли открыть .jsonl в Excel?

Напрямую Excel построчный JSON не понимает. Проще всего сначала посмотреть содержимое в текстовом редакторе, а для табличного представления — импортировать данные через Power Query или сконвертировать JSONL в CSV сторонним инструментом.

Какой программой открыть файл .jsonl на Windows?

Подойдёт любой текстовый редактор — от стандартного «Блокнота» до VS Code или Notepad++. Для удобного построчного просмотра с подсветкой синтаксиса лучше использовать редактор кода, а не простой текстовый редактор.

Почему онлайн JSON-валидатор ругается на мой .jsonl файл?

Потому что обычный валидатор JSON ожидает один документ на входе, а файл .jsonl содержит несколько независимых JSON-значений подряд. Это нормальное поведение формата, а не ошибка в файле — валидировать нужно построчно, а не весь файл целиком.

Как объединить несколько файлов JSONL в один?

Достаточно соединить файлы построчно один за другим, сохранив перевод строки между последней строкой одного файла и первой строкой следующего. Поскольку каждая строка независима, порядок файлов при объединении не важен для корректности результата.

Поддерживает ли Python/JavaScript формат JSONL из коробки?

Готового отдельного модуля «из коробки» ни там, ни там нет, но оба языка легко работают с JSONL через стандартные средства: в Python — построчное чтение файла с разбором каждой строки модулем json, в JavaScript/Node.js — построчное чтение потока с разбором каждой строки через JSON.parse().

Читайте также