2016-08-11 3 views
4

Я хочу анализировать и проверять (настраивать) файлы конфигурации JSON в Go. Я хотел бы быть в состоянии разобрать файл в структуры и подтверждения того, что:Golang: Проверить JSON и показать позицию ошибки

  1. никаких неожиданных ключи не присутствуют в файле формата JSON (в частности, для обнаружения опечаток)
  2. некоторые клавиши присутствуют и имеют не- пустые значения

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

Анализатор JSON, встроенный в Go, кажется, просто молча игнорирует неожиданные ключи. Я также попытался использовать jsonpb (Protobuf) для десериализации JSON, который возвращает ошибку в случае неожиданного ключа, но не сообщает о позиции.

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

Есть ли простой способ получить желаемое поведение?

ответ

2

Вы просмотрели JSON schema?

JSON Schema описывает ваш формат данных JSON.

Я считаю, что он находится на черновом этапе, но многие языки имеют библиотеки проверки. Вот реализация Go:

+0

Спасибо. Да, я пробовал реализацию, которую вы связали. К сожалению, он, похоже, не возвращает позицию ошибки в случае сбоя проверки. – stephank

+0

Я сам не пробовал библиотеку. Может быть, место ошибки может быть добавлено к нему? – miku

+0

Я посмотрел немного больше на gojsonschema xeipuuv. Он может печатать информацию об ошибке: 'fmt.Printf (" -% s:% s \ n ", error.Context(). String(), error)'. Отпечатано: '- (root) .0: name: name required' – stephank

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