首页 > 解决方案 > Everit 验证器:名为“type”的 JsonSchema 属性

问题描述

使用Everit,我试图提出一个 json 模式来验证

{
  "type": "my content type",
  "name": "content name"
}

我的解决方案:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "model.json",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "minLength": 1
        },
        "name": {
            "type": "string",
            "minLength": 1
        }
    },
    "additionalProperties": false,
    "required": [
        "type",
        "name"
    ]
}

这会产生错误:properties/type: expected type is one of JsonArray or String, found: JsonObject

这个模式加载得很好:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "model.json",
    "type": "object",
    "properties": {
        "some-type": {       <<-- Only field name changed
            "type": "string",
            "minLength": 1
        },
        "name": {
            "type": "string",
            "minLength": 1
        }
    },
    "additionalProperties": false,
    "required": [
        "some-type",
        "name"
    ]
}

但是“类型”字段是我不想重命名的数据库字段。如何定义 json 模式以使用名为“type”的属性?

属性下的“类型”属性名称是否解释为保留关键字?

谢谢,罗纳德

标签: jsonjsonschemajson-schema-validator

解决方案


根据另一个验证器(https://www.jsonschemavalidator.net/),您的架构完全没问题。

这可能是 Everit 验证器中的一个错误,因此您也可以考虑寻找替代方案。就个人而言,到目前为止,我一直很喜欢networknt/json-schema-validator,但尚未使用您的特定示例进行测试。

话虽如此,根据 Everit 文档,当它确定适用的草稿版本时,它会查找以下内容:

    "$schema": "http://json-schema.org/draft-07/schema"

但是在您的示例中,您使用:

    "$schema": "http://json-schema.org/draft-07/schema#"

#如果没有尾随片段 ( ) ,可能值得再次尝试。


推荐阅读