【问题标题】:Everit validator: JsonSchema property named "type"Everit 验证器:名为“type”的 JsonSchema 属性
【发布时间】:2020-07-16 13:55:48
【问题描述】:

使用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"
    ]
}

这会产生错误: 属性/类型:预期类型是 JsonArray 或 String 之一,找到: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”的属性?

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

谢谢, 罗纳德

【问题讨论】:

  • 这是验证器实现中的一个错误。我建议你向图书馆的作者提出问题。

标签: json jsonschema json-schema-validator


【解决方案1】:

根据另一个验证器 (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#"

没有尾随片段 (#) 可能值得再试一次。

【讨论】:

  • 感谢@Carsten 的确认。检查有无'#',这似乎没有什么区别。我会看看这是否是 Everit 中的错误/功能。
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2014-02-10
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多