Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to validate JSON and show positions of any errors?

I want to parse and validate (custom) JSON configuration files within Go. I would like to be able to parse the file into a struct and validate that:

  1. no unexpected keys are present in the JSON file (in particular to detect typos)
  2. certain keys are present and have non-empty values

In case the validation fails (or in case of a syntax error), I want to print an error message to the user that explains as detailed as possible where in the file the error happened (e.g. by stating the line number if possible).

The JSON parser built into Go seems to just silently ignore unexpected keys. I also tried using jsonpb (Protobuf) to deserialize the JSON, which returns an error in case of an unexpected key, but does not report the position.

To check for non-empty values, I could use an existing validation library, but I haven't seen any that reports detailed error messages. Alternatively, I could write custom code that validates the data returned by the built-in JSON parser, but it would be nice if there was a generic way.

Is there a simple way to get the desired behaviour?

like image 645
stephank Avatar asked Aug 11 '16 15:08

stephank


1 Answers

Have you looked at JSON schema?

JSON Schema describes your JSON data format.

I believe it is in Draft stage, but a lot of languages have validation libraries. Here's a Go implementation:

  • https://github.com/xeipuuv/gojsonschema
like image 154
miku Avatar answered Oct 22 '22 03:10

miku