我可以在JSON架构中将字段声明为“ JSON架构”吗?

时间:2019-04-18 16:28:14

标签: javascript json schema jsonschema

我的一个项目接受“插件”。这些插件需要提供一个特殊的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作为验证者。)

1 个答案:

答案 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必须是一个对象。 未知关键字被允许且有效,就像一个空对象或truefalse一样,因此,如果您要将properties更改为_properties在我的示例中,根据元架构,您的架构仍然有效。


也相关:

如果您要手动验证某个模式为有效模式,那么ajv可以轻松实现这一点!记录在https://ajv.js.org/#api-validateschema

  

.validateSchema(Object schema) -> Boolean

     

验证架构。此方法应用于验证架构   而不是由于JSON中uri格式的不一致而进行验证   架构标准。

     

默认情况下,当架构为   添加了,因此您几乎不需要直接使用它。

     

如果架构没有$ schema属性,则根据草稿对其进行验证   6元模式(选项meta不应为false)。

     

如果架构具有$ schema属性,则具有此ID(即   应该是以前添加的)用于验证传递的架构。

     

错误将显示在ajv.errors。