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
我在多个系统之间有一个现有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