Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья4 мин чтенияПросмотры0

Как проверить JSON-файл через jq до импорта в магазин

Проверяем синтаксис, пустой файл, несколько документов подряд и тип верхнего уровня. Команды чтения с проверенными примерами для jq 1.7.

Комментарии 0

Две прозрачные пластины с разными проёмами: отдельные проверки синтаксиса JSON и контракта
В этой статье

Файл обмена сохранился, но импорт его не принимает. До повторного запуска полезно проверить сам файл: есть ли в нём JSON, ровно один ли это документ и тот ли тип данных ожидает получатель. Успешный разбор синтаксиса отвечает только на первый из этих вопросов.

Руководство рассчитано на Linux, оболочку Bash и уже установленный jq версии 1.7. Проверки выполнены 27 сентября 2026 года в изолированной среде Linux с jq-1.7 на небольших учебных файлах. Команды читают локальную копию; настройки, службы и данные магазина не меняются. Нужны обычные права чтения файла, административные права не требуются.

Подготовьте небольшой обезличенный файл

Работайте с разрешённой копией без паролей и данных покупателей. В примерах ./payload.json — путь к вашему локальному файлу в текущем каталоге. Замените его на нужный путь; имя с пробелами заключите в кавычки. Не перенаправляйте вывод обратно в исходный файл: для диагностики перезапись не нужна.

Сначала подтвердите версию утилиты:

jq --version

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

Проверьте, может ли jq прочитать содержимое

jq empty ./payload.json

Фильтр empty не печатает разобранные значения. Поэтому корректный файл обычно даст пустой вывод. Сразу после команды прочитайте код завершения:

echo $?

Это код предыдущей команды в Bash. Не запускайте между проверкой и его чтением другие команды. Ноль означает успешное выполнение этого фильтра. Ненулевой код нужно разбирать вместе с сообщением об ошибке: причиной бывают синтаксис, недоступный файл или неверный запуск.

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

Пустой вывод ещё не означает один документ

На стенде пустой файл тоже прошёл jq empty с кодом ноль. Последовательность из двух объектов {} и {} также прошла: утилита умеет читать поток отдельных JSON-значений. Но ваш метод импорта может требовать ровно один объект. Для него оба таких файла непригодны.

Если контракт требует один JSON-объект верхнего уровня, используйте отдельную проверку:

jq -e -s 'length == 1 and (.[0] | type == "object")' ./payload.json

Параметр -s собирает прочитанные значения в массив. Условие проверяет, что значение одно и что это объект. Параметр -e позволяет использовать результат условия как код завершения. В наших примерах один объект дал true и код ноль; пустой файл, два объекта, массив и null дали false и код один. Повреждённый JSON завершился ошибкой разбора.

Здесь важно назначение проверки. Если API по договору принимает массив заказов, отклонение массива этим фильтром будет ожидаемым результатом неправильно выбранного условия. Нельзя превращать требование одного конкретного метода в правило для всех JSON-файлов.

У режима -s есть цена: он собирает весь вход в памяти. Эти команды проверены на маленьких файлах. Не запускайте такую проверку на многогигабайтной выгрузке загруженного сервера; для больших потоков нужен отдельно спроектированный разбор с ограничением ресурсов. Малый пример не подтверждает приемлемую нагрузку большого пакета.

Что остаётся за пределами этой проверки

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

Отдельно учитывайте повторяющиеся имена свойств. Стандарт JSON рекомендует уникальные имена; программы могут обрабатывать повторы по-разному. Обычный успешный разбор не следует выдавать за проверку их отсутствия. Если контракт запрещает повторы, нужен механизм, который замечает их до потери сведений при преобразовании в объект.

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

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.