我的一个项目接受“插件”。这些插件需要提供一个特殊的JSON文件,其中包含一些元信息,并使用JSON Schema描述事件对象。例如:
{
"name": "My component",
"description": "My super awesome component",
"documentation": "docs/main.md",
"maintainer": "john.doe@example.com",
"events": [{
"name": "click",
"description": "Occurs when the element is clicked.",
"data": [{
"name": "xPos",
"description": "The horizontal position of the click.",
"schema": {
"type": "integer",
"minimum": 0
}
}
]
}]
}
将根据JSON模式验证此元文件。现在我的问题是,如何验证events[0].data[0].schema
条目的内容?在这种情况下,期望字段是整数,但也可以是任何其他类型。 JSON架构中是否定义了"type":"schema"
或类似内容?
(出于价值,我使用ajv作为验证者。)
答案 0 :(得分:0)
您将寻找元模式!描述JSON架构的JSON架构。
您可以在http://json-schema.org/specification.html#meta-schemas
上找到它们您希望像这样用$ id引用元模式。
{
"$ref": "http://json-schema.org/draft-07/schema#"
}
使用以上内容作为您的架构,使用以下内容作为您要失败的测试数据,您可以使用https://www.jsonschemavalidator.net
{
"type": "integer",
"minimum": 0,
"properties": ["a"],
}
但是,您应该考虑到验证仅断言为false,因为properties
必须是一个对象。 未知关键字被允许且有效,就像一个空对象或true
或false
一样,因此,如果您要将properties
更改为_properties
在我的示例中,根据元架构,您的架构仍然有效。
也相关:
如果您要手动验证某个模式为有效模式,那么ajv可以轻松实现这一点!记录在https://ajv.js.org/#api-validateschema
.validateSchema(Object schema) -> Boolean
验证架构。此方法应用于验证架构 而不是由于JSON中uri格式的不一致而进行验证 架构标准。
默认情况下,当架构为 添加了,因此您几乎不需要直接使用它。
如果架构没有$ schema属性,则根据草稿对其进行验证 6元模式(选项meta不应为false)。
如果架构具有$ schema属性,则具有此ID(即 应该是以前添加的)用于验证传递的架构。
错误将显示在ajv.errors。