【问题标题】:Json Schema Properties with $ref带有 $ref 的 Json 模式属性
【发布时间】:2021-09-28 16:05:44
【问题描述】:

尝试对所有属性使用 $ref。我不知道这是什么语法有效,但不验证有效负载。这应该会失败,但不会。

我也试过 "$ref": "file:./ref.json"。

架构:

{
  "animal": {
    "properties":{
      "allOf": {"$ref": "file:./ref.json"}
    }
  },
  "required": ["animal"]
}

ref.json:

{
    "action":{
        "type": "string"
        },
    "required": ["action"]
}

有效载荷

{
    "animal": {
        "action": 2
    }
}

【问题讨论】:

标签: json jsonschema json-schema-validator


【解决方案1】:
  • "allOf": {"$ref": "file:./ref.json"} 在语法上无效——allOf 的值必须是一个数组。 (您的评估员应该会就此向您发出警告。)
  • JSON 模式评估程序不需要支持从磁盘或网络加载外部文件。检查您的文档以了解如何将文档添加到评估器,以便$ref 可以使用它们。 (当您引用未知资源时,您的评估员应该会向您发出警告。)

您没有看到上述错误的原因是您的整个架构中没有可识别的关键字——您缺少一个包裹在整个架构周围的"properties": { ... }。顶级“关键字”是“动物”,它是无法识别的,因此架构中的任何地方都没有可识别的关键字,因此没有什么可以使它返回无效的结果。

【讨论】:

  • 感谢您澄清顶级关键字问题。至于文件,它是与架构(Win10)位于同一文件夹中的本地文件。但是,添加属性后,它仍然可以毫无问题地解决。 ``` { "properties": { "animal": { "type": "object", "properties":{ "allOf": {"$ref": "file:./ref.json"} } } } ,“必需”:[“动物”]}```
  • 这可能是 Draft-7 如何使用 $ref 的问题吗?与以下内容一样,第二个值有效,但不适合我正在寻找的内容。 "$ref": "ref.json", "action":{"$ref": "ref.json"}
  • 您不能在 JSON Schema 的非模式对象中使用 $ref。我想在此处给出部分答案的情况下显示更新的 JSON Schema,最好添加到您的问题中。这里在cmets中加代码用处不大。
  • 您仍然缺少 allOf 内容周围的包装列表,如第一个项目符号中所述。
猜你喜欢
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2018-12-03
  • 2017-11-21
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多