【问题标题】:Any way to accept any type of schema接受任何类型架构的任何方式
【发布时间】:2016-09-01 17:59:38
【问题描述】:

我有这个架构,我希望下面的 dataRecord 属性中只有 1 个“任意”架构。我还期望 dataRecord 属性应该只包含模式。目前我们只有 2 个子模式,我们在 dataRecord 属性中引用它们。在未来,我们预计会添加更多模式,例如 test2、test3 等。我想避免编辑以下架构以将更多 $ref 添加到 dataRecord 属性。有没有办法在不添加更多对 dataRecord 属性的引用的情况下实现这一点,同时确保始终提供 1 个模式。任何帮助将不胜感激。

{
 "id": "http://anysiteaddress",
 "type": "object",
 "properties": {
 "recordId": {
  "type": "string"
},
"dbOperationType": {
  "type": "string"
},
"schema": {
  "type": "string"
},
"schemaVersion": {
  "type": "string"
},
"utcTimeStamp": {
  "type": "string"
},
"dataRecord": {
  "oneOf" : [
    { "$ref": "test.json#/definitions/test"},
    { "$ref": "test1.json#/definitions/test1"}
    ]
}
},
"additionalProperties": false,
"required": [
"recordId",
"dbOperationType",
"schema",
"schemaVersion",
"utcTimeStamp",
"dataRecord"
 ]
 }

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    听起来您希望能够引用目录并让oneOf 包含在该目录中找到的每个模式。这不是你可以用 JSON Schema 做的事情。您将不得不修改某些内容以添加新架构。

    您可以为dataRecord 创建一个额外的架构,并让您的架构引用该新架构。然后,当您添加新架构时,您的架构不需要更改,但您必须改为更改 dataRecord 架构。

    您的另一个选择是在提供服务之前在代码中生成这部分模式。根据您打算如何使用此架构,这可能是也可能不是一个好的选择。

    【讨论】:

    • 对于您提到的第一种引用目录的方法。我不知道怎么做,你能举个例子吗?
    • 我没有把它作为一个选项。我说这是“你不能用 JSON Schema 做的事情”。抱歉,如果不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多