JSON-模式排除属性(与必需属性相反)

JSON-schema exclude properties (opposite to required properties)

在 JSON-schema 中,可以 require 对象中的某些键,请参阅此示例,取自 json schema docs:

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string" },
    "address": { "type": "string" },
    "telephone": { "type": "string" }
  },
  "required": ["name", "email"]
}

我需要相反的东西:有没有办法禁止防止某个键出现在对象中?具体来说,我想防止用户在对象中使用空键:

{
    "": "some string value"
}

您可以通过以下方式按名称排除某些键:

{
 "not": {
  "anyOf": [
    { "required": [ "property1" ] },
    { "required": [ "property2" ] },
    { "required": [ "property3" ] },
    ...
  ]
}

https://json-schema.org/understanding-json-schema/reference/combining.html

除了使用 not 语法排除键(参见 Ether 的回答)之外,还可以使用 property-names.

来实现目标

在以下示例中,所有键都必须映射到字符串 URI。我们还排除了所有非字母数字(通过 pattern)或没有特定长度(通过 minLength)的键。除此之外,我们对密钥没有任何限制。

"SomeKeyToBeValidated": {
  "type": "object",
  "properties": { },
  "propertyNames": {
    "type": "string",
    "minLength": 1,
    "pattern": "^[a-zA-Z0-9]*$"
  },
  "additionalProperties": {
    "type": "string",
    "format": "uri"
  }
}