首页 > 解决方案 > 使用 JSON Schema,如何验证事先不知道键和值的对象?

问题描述

我需要验证这种格式:

{
    "variables": {
        "team": "red",
        "L3_HCU_TESTS": "N",
        "dbo_user": "user",
        "version": 920
    }
}

我事先不知道键和值的名称。

“变量”不是强制性的,但如果提供,键可以是任何字符串,值可以是任何值。对我来说重要的是验证“变量”(如果提供者)将包括键和值。不允许空值

标签: jsonschema

解决方案


对于 JSON 对象,键必须是字符串,因此您对基于字符串的键的要求已包含在“有效 JSON”中。

扩展您的要求,您希望:

  • “变量”必须是一个对象
  • 对象中必须至少有一个属性
  • 属性的值不能为空

这是满足这些要求的架构:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "variables": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "not": {
          "type": "null"
        }
      }
    }
  }
}

您可以使用此链接针对您的实例对其进行测试。

"type": "object"确保“变量”是一个对象。

"minProperties"确保对象中有最少数量的属性。

"additionalProperties"值子模式应用于对象中的所有键值(因为未定义“属性”和“模式属性”)。子模式反转子模式的结果,它定义类型必须为空。反转结果,必须为 NOT NULL。

我没有看到minProperties经常使用。这是该 JSON Schema 关键字的参考链接:https ://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-6.5.2


推荐阅读