使用 Golang 对可选字段进行 JSON 模式验证

标签 json validation go option-type

Golang JSON 模式验证库验证模式中的必需字段是否存在于服务请求/响应中。

我需要验证服务请求或响应中的任何字段都必须是架构中的属性。如果模式中不存在有效负载中的属性,则验证应该失败。

例如:GET 响应:

{
   "pet": "dog",
   "name": "Scooby",
   "licence": "123-123"
}

在我的示例 JSON 模式中,没有任何字段是必需的。但是,如果我在我的服务中将字段“pet”更改为“petBreed”,它不会被 JSON 架构验证器(例如 https://github.com/xeipuuv/gojsonschema)捕获。

将所有字段设为必填不是一种选择。任何人都可以在 Go 中推荐一个库,它将:

  1. 验证所有响应字段都在模式中
  2. 如果模式中的字段不在响应中则不会失败

最佳答案

JSON Schema 定义 additionalProperties为此,像这样的架构应该可以工作:

{
    "type": "object",
    "additionalProperties": false,
    "properties":{
        "pet": ...,
        "name": ...,
        "license": ...,
    },
}

这是 implemented但在 gojsonschema 中没有记录。

请注意,additionalProperties 是一个架构,而不仅仅是一个 bool 值,即您可以对未知属性进行任意验证,而不仅仅是禁止它们。

关于使用 Golang 对可选字段进行 JSON 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977640/

相关文章:

unit-testing - 使用GAE测试时如何获取主机名?

java - 未调用 jackson 自定义解串器

c# - 使用属性将枚举序列化为 JSON.NET 中的字符串

java - 如何忽略一个实体中的属性而不忽略另一个实体中的属性 - JSON

javascript - 提交前的 Extjs 表单验证

ruby-on-rails-3 - 如何在提交表单的页面上呈现验证错误?

javascript - jQuery 和纯 Javascript 验证的区别

go - "undefined"函数在另一个文件中声明?

docker - 开发在 Docker 容器中运行的 Golang 应用程序的最佳实践/方法

javascript - 从javascript中的查询字符串获取数据