Определите, что является отдельной записью
Для JSON в NDJSON исходный корень должен быть массивом. Каждый его элемент становится одной физической строкой: объектом, массивом, строкой, числом, true, false или null. Один корневой объект не преобразуется автоматически в список своих полей — сначала решите, как должен выглядеть массив записей.
NDJSON не содержит внешних квадратных скобок и запятых между строками. При этом каждая непустая строка обязана быть самостоятельным корректным JSON. Красиво отформатированный объект на нескольких строках не подходит: его нужно сначала записать одной строкой или использовать исходный массив.
Запишите элементы массива отдельными строками
Вставьте JSON-массив и обработайте его без дополнительной настройки разделителя. Порядок элементов сохраняется. В примере две записи с текстовыми ID дают две строки NDJSON, а ведущие нули остаются частью строкового значения. Корневой пустой массив создаёт пустой результат, потому что записей в нём нет.
Перенос внутри текстового поля экранируется как \n и не создаёт новую физическую запись. Кавычки тоже остаются частью правил JSON. Не разворачивайте такие последовательности вручную перед передачей файла получателю, иначе одна запись может разделиться на несколько строк.
[{"id":"001","имя":"Анна"},{"id":"002","имя":"Борис"}]{"id":"001","имя":"Анна"}
{"id":"002","имя":"Борис"}Каждый элемент массива сериализуется на одной строке; типы полей не меняются.
Соберите строки в массив и проверьте ошибки
При обратном преобразовании непустые строки становятся элементами массива в исходном порядке. Пустые строки пропускаются; файл только из пробельных строк даёт пустой массив. Комментарии, завершающие запятые и произвольный текст не являются JSON-записями и вызывают ошибку.
Сообщение указывает физическую строку, включая пустые строки перед ошибкой. Если первая запись корректна, вторая строка пустая, а третья содержит {broken}, исправлять нужно третью. Полный результат не выдаётся с молча отброшенной повреждённой записью.
{"id":"001"}
{"id":"002"}[
{
"id": "001"
},
{
"id": "002"
}
]Пустая физическая строка пропущена; две записи сохранены в прежнем порядке.
- Убедитесь, что каждая запись занимает одну строку.
- Запустите обратное преобразование.
- Исправьте указанную ошибочную строку в копии исходника.
- Сравните число непустых записей с длиной готового массива.
Сохраняйте типы и учитывайте ограничения
Ввод ограничен 200 000 символов на поле, вложенность — 64 уровнями, разобранные данные — 30 000 узлами, вывод — миллионом символов. Обработка выполняется в памяти браузера, без потоковой выдачи огромных журналов. Большую выгрузку делите на самостоятельные корректные части, а не посередине JSON-строки.
Повторяющиеся имена полей и числа, которые нельзя сохранить без потери, отклоняются. Длинные идентификаторы записывайте строками с кавычками, если этого требует формат получателя. Преобразование не проверяет API-схему: откройте сохранённый файл и проверьте обязательные поля, количество записей и несколько значений.
Вопросы и ответы
Можно ли передать один объект вместо массива?
В направлении JSON в NDJSON нужен массив. Один объект отклоняется: инструмент не угадывает, какие его поля считать записями.
Разобьёт ли перенос в текстовом поле одну запись на две?
Нет, перенос сериализуется как экранированная последовательность \n внутри строки JSON. Физическая строка остаётся одной.
Что будет с пустыми строками исходного NDJSON?
Они пропускаются, но учитываются в физическом номере строки при сообщении об ошибке следующей записи.
Можно ли смешать объекты, числа и null?
Да, допустимы разные корректные JSON-значения. Получатель файла может требовать только объекты — проверьте его собственную схему.
Сохранится ли очень длинный числовой идентификатор?
Число с потерей точности отклоняется. Для текстового ID используйте JSON-строку в кавычках и согласуйте тип с получателем.
Это обработчик потокового журнала без ограничения размера?
Нет, весь ввод разбирается в браузере с ограничениями объёма и структуры. Для больших журналов нужны отдельные средства обработки.