Json 元架构 :如何限制另一个 Json 架构具有嵌套对象



所以我使用的是Json元模式 https://json-schema.org/draft/2019-09/meta/core 使用 https://github.com/java-json-tools/json-schema-validator 进一步验证 JSONSchema

我有一个要求,我必须限制架构具有嵌套对象,例如下面的架构应该是无效的

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/product.schema.json",
"title": "test",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"productId": {
"description": "Outer",
"type": "object",
"properties": {
"lineId": {
"description": "Outer",
"type": "object"
}
}
}
}
}

由于productId是一个对象,并且它lineId另一个对象,productId只能有字符串或数字字段,而不能有对象, 如何扩展元模式来强制执行这一点。 任何帮助不胜感激

您的问题有一些版本不一致,但我假设 draft-04,因为您使用的验证器最多只支持 draft-04。如果您需要对其他草稿执行此操作,此过程将在 draft-07 中类似。2019-09草案将更加复杂。

  1. 复制草稿-04 元架构
  2. 删除子架构中不允许的任何内容,包括"对象"type以及与对象相关的任何关键字,例如properties
  3. id更改为独特的内容,例如https://my-project.com/nested-meta-schema.
  4. 创建 draft-04 元架构的另一个副本
  5. 将所有递归引用 ({ "$ref": "#" }) 替换为对您刚刚创建的架构的引用 ({ "$ref": "https://my-project.com/nested-meta-schema" })
  6. 将第二个架构的id更改为唯一内容,如https://my-project.com/flat-meta-schema
  7. 对于要根据元架构验证的任何架构,请将$schema更改为为第二个元架构提供的 id。

请注意,并非所有实现都支持自定义元架构,因此您的里程可能会有所不同。

相关内容

  • 没有找到相关文章

最新更新