Why not just define your schema using Protocol Buffers and use the [proto3 JSON mapping](https://developers.google.com/protocol-buffers/docs/proto3#j...)?
On a similar note, text protos actually work very well as configuration files and are used by SyntaxNet/Parsey McParseface [1] and Bazel's CROSSTOOL config [2].
[1] https://github.com/tensorflow/models/blob/master/syntaxnet/s...
[2] https://github.com/bazelbuild/bazel/blob/master/tools/cpp/CR...