JSON 架构 - 名为 "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验证器命中";类型";在标记为";问题"它会感到不安,并抛出一个关于类型应该是字符串或数组的错误。

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

我想知道它是否没有使用官方的测试套件(https://github.com/json-schema-org/JSON-Schema-Test-Suite)?

您没有说明您正在使用的实现或语言,但也许您可以在这里找到另一种实现:https://json-schema.org/implementations.html#validators

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

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

不幸的是,似乎没有一个很好的方法使"^type$"成为必需的属性。我已经决定将所有其他属性列为"required",并将最小和最大属性计数设置为应该存在的数字。

最新更新