所以我使用的是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草案将更加复杂。
- 复制草稿-04 元架构
- 删除子架构中不允许的任何内容,包括"对象"
type
以及与对象相关的任何关键字,例如properties
。 - 将
id
更改为独特的内容,例如https://my-project.com/nested-meta-schema
. - 创建 draft-04 元架构的另一个副本
- 将所有递归引用 (
{ "$ref": "#" }
) 替换为对您刚刚创建的架构的引用 ({ "$ref": "https://my-project.com/nested-meta-schema" }
) - 将第二个架构的
id
更改为唯一内容,如https://my-project.com/flat-meta-schema
。 - 对于要根据元架构验证的任何架构,请将
$schema
更改为为第二个元架构提供的 id。
请注意,并非所有实现都支持自定义元架构,因此您的里程可能会有所不同。