2016-06-10 5 views
1

Я использую формат файла. Фактически, формат JSON имеет определенную структуру. Формат поставляется с валидатором, что отлично, и дает полезные сообщения об ошибках. Однако валидатор выходит из строя, когда ошибка приводит к тому, что вход недействителен JSON и дает очень плохое сообщение об ошибке.Сгенерировать парсер python для конкретного формата JSON

Я могу использовать это с обычным валидатором JSON, но то, что я действительно хочу сделать, это уметь помещать структуру JSON в инструмент и получать (python) парсер из другого конца. Очевидно, есть разные способы сделать это, мой вопрос: существуют ли способы определения формата JSON, позволяющие мне не писать парсер для самого JSON?

Вариант использования: Я хотел бы создать «правильный» валидатор для формата, чтобы пользователь мог загрузить свой файл и проверить его. Я могу просто написать BNF, но я бы хотел написать BNF для инструмента, который понял, что это BNF-in-JSON.

+0

Если они отправляют вам недействительный JSON, есть ли что-то, что им нужно знать, кроме того, что оно недействительно? Просто используйте обычный 'json.loads', чтобы проверить, что это действительно JSON. – cmd

+0

Знаете ли вы, что означает JSON? Обозначение объекта JavaScript, это уже обозначение, есть только * один * действительный «формат». хорошо отформатированные объекты JSON может быть проанализированы с встроенным модулем JSON от JSon импортных грузов нагрузки (jsonObjectAsString) – cinatic

+0

также трудно догадаться, что вы хотите сделать. Обычно вы хотите разобрать json с помощью json module или jsonpickle, а затем проверить правильность ваших данных. – cinatic

ответ

1

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

0

Если я правильно понимаю вас, валидатор использует библиотеку json для чтения файла, а затем выполняет некоторые дополнительные проверки. Для меня это хороший дизайн. зачем изобретать колесо? Если недопустимый JSON дает сообщения об ошибках, которые являются слишком загадочными, как их поймать в блоке try ... except и сформулировать сообщение об ошибке по-своему? Помимо сообщения об исключении, вы можете восстановить довольно много информации об ошибке, проверив исключение.

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

Смежные вопросы