json - 元模式指定所有属性所需的属性

标签 json jsonschema

我想自定义一个元模式,使得所有属性都需要有一个附加属性,例如,我如何要求所有属性都指定一个“type”

那么这个模式应该会失败:

{
    "$schema": "http://json-schema.org/schema#",
    "title": "...",
    "description": "...",
    "type": "object",
    "properties": {
        "name": {
            "description": "..."
        }
    }
}

但是这个应该会成功:

{
    "$schema": "http://json-schema.org/schema#",
    "title": "...",
    "description": "...",
    "type": "object",
    "properties": {
        "name": {
            "description": "...",
            "type": "string"
        }
    }
}

最佳答案

不幸的是,编写元模式并不容易。正在研究中,但还没有好的解决方案。

您必须复制要扩展的元架构,然后添加 "required": ["type"]

但是,当我们在这里时,也许我可以说服你不要这样做。在某些情况下,使 type 关键字成为必需会导致问题。这里有一些例子。 https://github.com/json-schema/json-schema/issues/172#issuecomment-124214534

编辑

在进一步讨论之后,我们发现这种特殊情况不存在我们通常在扩展元模式时遇到的问题,因为它不需要递归。以下是扩展 Draft-06 架构以包含名为 custom 的新关键字的示例,该关键字是一个 bool 值,仅在 properties 架构的顶层需要。

{
  "allOf": [
    { "$ref": "http://json-schema.org/draft-06/schema#" },
    {
      "properties": {
        "properties": {
          "patternProperties": {
            ".*": {
              "properties": {
                "custom": { "type": "boolean" }
              },
              "required": ["custom"]
            }
          }
        }
      }
    }
  ]
}

这是一个符合此元架构的示例架构。

{
  "properties": {
    "foo": {
      "custom": true,
      "not": { "type": "string" }
    }
  }
}

“foo”架构需要 custom 关键字,但 not 架构或顶级架构不需要。

关于json - 元模式指定所有属性所需的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160774/

相关文章:

json - 如何在 postman 的帖子正文中有多行?

JSON 架构 : Require properties on an optional object type

jsonschema - 如何根据字段描述的对象类型针对 JSON 模式验证 JSON 对象?

json - 确保 JSON 模式中的一个属性不为空

json - 在逻辑应用程序 JSON 数组中解析单个对象的抛出错误但对于多个对象它工作正常

python - jsonschema 通过具有不同名称或类型的键进行验证

python - 使用 python mjson.tool 在 Bash 中解码 JSON

android - 如何在 Android 中从 Json 批量插入到 Sqlite

java - Application/JSON 是 Restful Web 服务中不支持的媒体类型

c# - 使用 JSON.net 将 JSON 解析为匿名对象[]