有什么方法可以使用schemaschema验证基于模式的json并从json中剥离未知密钥?
模式示例:
{
"type":"object",
"$schema": "http://json-schema.org/draft-03/schema",
"required":False,
"properties":{
"address": {
"type":"object",
"required":True,
"properties":{
"city": {
"type":"string",
"required":True
}
},
"phoneNumber": {
"type":"array",
"required":False,
"items":
{
"type":"object",
"required":False,
"properties":{
"number": {
"type":"string",
"required":False
}
}
}
}
}
}
示例数据:
{
"address":{
"streetAddress": "1 Street",
"city":"New York",
"name": "Tom",
"houseNumber":18
},
"phoneNumber":[
{
"type":"home",
"number":"212 222 2222"
}
]
}
因此,验证器应传递数据并返回剥离的版本,如下所示:
{
"address":{
"city":"New York",
},
"phoneNumber":[
{
"number":"212 222 2222"
}
]
}
Cerberus具有“ purge_unknown”功能,但不支持JSON-Schema。
答案 0 :(得分:0)
我注意到您可以根据验证错误过滤掉未知字段。在这种情况下,您可以使用additionalProperties
字段来限制意外的密钥。
{
"type":"object",
"$schema": "http://json-schema.org/draft-03/schema",
"required":false,
"properties":{
"address": {
"type":"object",
"required":true,
"properties":{
"city": {
"type":"string",
"required":true
}
},
"additionalProperties": false,
},
"phoneNumber": {
"type":"array",
"required":false,
"items":
{
"type":"object",
"required":false,
"properties":{
"number": {
"type":"string",
"required":false
}
},
"additionalProperties": false,
}
}
}
}
这是给定示例输入的验证结果:
消息: 尚未定义属性“ streetAddress”,并且该架构不允许其他属性。
架构路径: #/ properties / address / additionalProperties消息: 尚未定义属性“名称”,并且该架构不允许其他属性。 架构路径: #/ properties / address / additionalProperties
消息: 尚未定义属性“ houseNumber”,并且该架构不允许使用其他属性。 架构路径: #/ properties / address / additionalProperties
消息: 尚未定义属性“类型”,并且架构不允许其他属性。 架构路径: #/ properties / phoneNumber / items / additionalProperties