JSON 架构 - 名为 "type" 的字段

JSON Schema - field named "type"

我在多个系统之间有一个现有JSON数据馈送,我不控制无法更改。我的任务是为此提要编写架构。 现有的 JSON 部分看起来像这样:

 "ids": [
            { "type": "payroll", "value": "011808237" },
            { "type": "geid",  "value":  "31826" }
           ]

当我尝试为此定义一个 JSON 模式时,我得到了一个看起来像这样的模式片段:

"properties": {
    "type": {                   <====================== PROBLEM!!!!
        "type": "string",
        "enum": [ "payroll", "geid" ]
    },
    "value": {
        "type": [ "string", "null" ],
        "pattern": "^[0-9]*$"
    }
}

正如您可能猜到的那样,当 JSON 验证器在标记为“问题!!!”的行上输入该“类型”时它变得不高兴并抛出关于类型需要是字符串还是数组的错误。

如果不是合适的解决方案,我至少找到了一个解决方法。不要在“properties”中使用“type”,而是在“patternProperties”中使用“^type$”。即

"patternProperties": {
    "^type$": {
        "type": "string"
    }
}

不幸的是,似乎没有什么好方法可以让“^type$”成为必需的 属性。我已经决定将所有其他属性列为“必需”并将最小和最大 属性 计数设置为应该存在的数字。

这是您正在使用的特定实现中的一个错误,应该这样报告。它应该能够很好地处理看起来像关键字的属性。事实上,元模式(有效模式的模式)正是以这种方式使用“类型”,以及所有其他关键字:例如http://json-schema.org/draft-07/schema

不知是不是使用了官方测试套件(https://github.com/json-schema-org/JSON-Schema-Test-Suite)?

您没有说明您使用的是什么实现或什么语言,但也许您可以在这里找到替代方案:https://json-schema.org/implementations.html#validators