如何验证 JSON 并显示任何错误的位置?

ste*_*ank 6 validation json go

我想在 Go 中解析和验证(自定义)JSON 配置文件。我希望能够将文件解析为结构并验证:

  1. JSON 文件中不存在意外的键(特别是用于检测拼写错误)
  2. 某些键存在并且具有非空值

如果验证失败(或出现语法错误),我想向用户打印一条错误消息,尽可能详细地解释文件中发生错误的位置(例如,如果可能,通过说明行号)。

Go 内置的 JSON 解析器似乎只是默默地忽略了意外的键。我还尝试使用 jsonpb (Protobuf) 反序列化 JSON,如果出现意外键,它会返回错误,但不报告位置。

要检查非空值,我可以使用现有的验证库,但我还没有看到任何报告详细错误消息的库。或者,我可以编写自定义代码来验证内置 JSON 解析器返回的数据,但如果有一种通用的方法就好了。

有没有一种简单的方法来获得所需的行为?

mik*_*iku 2

您看过JSON 模式吗?

JSON 架构描述了您的 JSON 数据格式。

我相信它还处于草案阶段,但很多语言都有验证库。这是一个 Go 实现:

  • 我在该库中编写了很多错误处理。您可以定义一个将“additionalProperties”设置为“false”的架构,然后从库中查找“additional_property_not_allowed”错误类型。您可以从 ResultError.Field() 中提取字段名称来获取意外字段的名称。 (2认同)