【发布时间】:2022-01-14 07:46:22
【问题描述】:
我正在使用 fastjsonschema 来验证包含产品详细信息列表的 JSON 对象。
如果对象缺少值,验证应该使用默认值创建它,例如
validate = fastjsonschema.compile({
'type': 'object',
'properties': {
'a': {'type': 'number', 'default': 42},
},
})
data = validate({})
assert data == {'a': 42}
但是对于数组,它只会填充您在架构中定义的数组对象的默认值。这意味着如果用户输入的数组项比架构覆盖的多,架构将不会验证额外的项。
有没有办法声明数组中的所有项目都将遵循相同的架构,并且都应该被验证?
目前当我在架构中定义时
{
"products": {
"type": "array",
"default": [],
"items":[
{
"type": "object",
"default": {},
"properties": {
"string_a": {
"type": "string",
"default": "a"
},
"string_b": {
"type": "string",
"default": "b"
}
}
]
}
}
当我尝试验证时会发生什么
{"products":[{},{}]}
是不是变成了
{"products":[{"string_a":"a","string_b":"b"},{}]}
这可能会导致丢失数据的问题,当然最好对整个事情进行验证。
那么有没有办法为数组中的对象定义架构,然后将该架构应用于数组中的每个项目?
谢谢
【问题讨论】:
标签: python arrays json schema jsonschema