繁体   English   中英

Json Meta Schema:如何限制另一个 Json Schema 具有嵌套对象

[英]Json Meta Schema : How to restrict another Json Schema from having nested objects

所以我使用 Json Meta Schema https://json-schema.org/draft/2019-09/meta/core使用https://github.com/java-json-tools/json-schema-进一步验证 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是一个对象并且它有另一个对象lineIdproductId只能有 string 或 number 字段,而不能有 object ,如何扩展 MetaSchema 以强制执行此操作。 任何帮助表示赞赏

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM