我在多个系统之间有一个现有的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"
,并将最小和最大属性计数设置为应该存在的数字。