Определите, что является отдельной записью

Для 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"
  }
]

Пустая физическая строка пропущена; две записи сохранены в прежнем порядке.

  1. Убедитесь, что каждая запись занимает одну строку.
  2. Запустите обратное преобразование.
  3. Исправьте указанную ошибочную строку в копии исходника.
  4. Сравните число непустых записей с длиной готового массива.

Сохраняйте типы и учитывайте ограничения

Ввод ограничен 200 000 символов на поле, вложенность — 64 уровнями, разобранные данные — 30 000 узлами, вывод — миллионом символов. Обработка выполняется в памяти браузера, без потоковой выдачи огромных журналов. Большую выгрузку делите на самостоятельные корректные части, а не посередине JSON-строки.

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

Вопросы и ответы

Можно ли передать один объект вместо массива?

В направлении JSON в NDJSON нужен массив. Один объект отклоняется: инструмент не угадывает, какие его поля считать записями.

Разобьёт ли перенос в текстовом поле одну запись на две?

Нет, перенос сериализуется как экранированная последовательность \n внутри строки JSON. Физическая строка остаётся одной.

Что будет с пустыми строками исходного NDJSON?

Они пропускаются, но учитываются в физическом номере строки при сообщении об ошибке следующей записи.

Можно ли смешать объекты, числа и null?

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

Сохранится ли очень длинный числовой идентификатор?

Число с потерей точности отклоняется. Для текстового ID используйте JSON-строку в кавычках и согласуйте тип с получателем.

Это обработчик потокового журнала без ограничения размера?

Нет, весь ввод разбирается в браузере с ограничениями объёма и структуры. Для больших журналов нужны отдельные средства обработки.