Преобразовать JSON Lines в массив JSON и обратно: проверка каждой строки, пропуск ошибочных строк с указанием номера и причины, вывод по одному объекту на строку, скачивание файла. Всё считается в браузере.
Что на входе и что должно получиться
Как форматируется массив. «Без отступов» — весь массив одной строкой
Как разделяются строки результата — в поле и в скачанном файле
JSON Lines встречается там, где данные пишутся потоком: логи приложений, выгрузки из аналитических систем, файлы для загрузки в BigQuery, ClickHouse и Elasticsearch, ответы потоковых API. В нём каждая строка — отдельный объект, поэтому файл можно дописывать в конец и читать построчно. Но большинство программ и библиотек ждут JSON-массив: разбор такого файла целиком падает на первой же строке, потому что в нём нет ни открывающей скобки, ни запятых между значениями. Отсюда и задача — перевести один формат в другой, ничего не потеряв по дороге.
Разбор идёт построчно, и в этом главное отличие от обычного конвертера: видно, какая именно строка не разобралась и почему. При включённом флажке «Пропускать ошибочные строки» битые строки отбрасываются, а по каждой в отчёте остаётся номер, причина и фрагмент — по ним понятно, обрезалась строка при записи, осталась лишняя запятая или внутри объекта оказался перенос. При выключенном флажке разбор останавливается на первой ошибке, и данные не теряются молча. Корректные строки попадают в массив в исходном порядке.
Отступ и перевод строки выбираются отдельно: массив удобно читать с отступами в два пробела или табуляцией, а файлу JSON Lines нужен один объект на строку и тот перенос, которого ждёт принимающая система. Результат копируется в буфер или скачивается файлом с расширением .json либо .jsonl. Всё считается в браузере: вставленный текст не отправляется на сервер и не сохраняется — при обновлении вкладки поле очистится, поэтому нужный результат лучше скачать сразу.
JSON Lines (он же JSONL и NDJSON) — это текст, в котором каждая строка целиком является самостоятельным значением JSON, чаще всего объектом. Внешних скобок и запятых между строками нет: границей значения служит перевод строки, поэтому у файла нет ни начала, ни конца в том смысле, в каком они есть у массива. JSON-массив — один документ: он начинается с квадратной скобки, элементы разделены запятыми, и значение собрано только тогда, когда прочитан весь файл. Направление выбирается списком «Направление»: «JSON Lines в JSON» собирает строки в массив, «JSON в JSON Lines» печатает каждый элемент массива отдельной строкой.
Запись в JSONL можно дописать в конец файла одной строкой, не перечитывая прежнее содержимое: у массива для этого пришлось бы убрать закрывающую скобку, поставить запятую и вернуть скобку на место. По той же причине JSONL годится для потоковой обработки: строку разбирают и обрабатывают сразу, не держа в памяти весь файл. Обрыв на середине портит только последнюю строку, тогда как у массива незакрытая скобка делает нечитаемым весь документ. Ещё JSONL удобно смотреть глазами: в логе построчно видно, где чей объект.
Включите «Пропускать ошибочные строки»: разбор пойдёт дальше, а по каждой отброшенной строке появится строка отчёта — номер, причина и фрагмент строки, по которому видно, где именно ошибка. Заканчивается отчёт сводкой «прочитано строк, корректных, пропущено»: по ней понятно, много ли потеряно. При выключенном флажке инструмент останавливается на первой ошибке и показывает её в поле результата: так видно, что нужно исправить, и ни одна строка не теряется молча.
Да. Строки разбираются сверху вниз и попадают в массив в том же порядке, в каком стояли в файле; при обратном преобразовании элементы массива печатаются по порядку. Инструмент ничего не сортирует и не группирует. Пропадают только строки, отброшенные флажком пропуска, и пустые строки — они не считаются данными, потому что файл JSON Lines обычно заканчивается переводом строки. В сводке такие строки не учитываются вовсе.
Да, вложенность сохраняется на любой глубине: разбор идёт встроенным разборщиком браузера, и объект остаётся объектом, а не превращается в текст. В JSON Lines такой объект записывается одной строкой — переносов внутри значения быть не может, иначе строка перестанет быть отдельным значением; кавычки и переводы строк внутри строк экранируются автоматически. Из-за этого список «Отступ» во втором направлении не действует: отступ нужен только при сборке массива.
Это разные последовательности: LF — один символ, CRLF — два. Файл, который поедет в Windows-программу или в текстовый редактор со строгими настройками, обычно ждут с CRLF, а файлы для Linux, macOS и большинства серверов — с LF. Разница видна и в системе контроля версий: смешанные переносы дают лишние изменения в diff. Разбирается при этом любой вариант: строки в поле ввода делятся по обоим переносам, поэтому файл из Windows можно вставить как есть. Выбранный перенос применяется к результату — и в поле, и в скачанном файле.
Отдельного ограничения у инструмента нет: всё упирается в память вкладки и скорость разбора. До нескольких мегабайт — это десятки тысяч строк — работа идёт без заметных задержек. На файлах в десятки мегабайт браузер начнёт тормозить, потому что текст целиком лежит в поле ввода, а результат пересчитывается при каждом изменении настроек. Такой файл надёжнее разрезать на части и обрабатывать по частям. Вставленные данные никуда не отправляются: разбор идёт в браузере, а счётчики и отчёт считаются по тому же тексту, что лежит в поле.