我正在尝试在python脚本中定义一个架构,以立即用于验证某些json数据。模式定义如下所示:
response_schema = {
"required": ["identifiers" ],
"properties": {
"identifiers": {
"minProperties": 1,"maxProperties": 1,
"additionalProperties": {
"required": [ "name","surname" ],
"properties": {
"surname": {
"required": ["sur1", "sur2" ],
"properties": {
"sur1": { },
"sur2": { }
} },
"name": {},
"additionalProperties": false
}
}
}
},
"additionalProperties": false
}
该模式在任何在线验证器中都可以正常工作,但是当我在脚本中执行验证时
validate(response_body_dict, response_schema)
我收到以下错误:
NameError:名称'false'未定义
如果我从模式中删除行"additionalProperties" : false
,我不会收到错误,但对我来说当然不起作用,因为它的验证性较差。
任何人都可以解释为什么我会收到此错误吗?
答案 0 :(得分:1)
问题是Python和JSON之间的区别。在Python中,您将其拼写为“ False”,而在JSON中,则将其拼写为“ false”。
如果您将架构复制到文本文件中并使用json模块加载,它将正常运行-没有错误。
在Python程序中加载此代码段时,会得到您提供的错误,因为Python不知道什么是“ false”。代码正在创建字典,而不是JSON模式。
如果您想就地原型,可以将其包装在“”中,然后使用json.loads。
赞:
import json
response_schema_str = """{
"required": ["identifiers" ],
"properties": {
"identifiers": {
"minProperties": 1,
"maxProperties": 1,
"additionalProperties": {
"required": [
"name",
"surname" ],
"properties": {
"surname": {
"required": [
"sur1",
"sur2" ],
"properties": {
"sur1": { },
"sur2": { }
}
},
"name": {},
"additionalProperties": false
}
}
}
},
"additionalProperties": false
}"""
response_schema = json.loads(response_schema_str)
print(response_schema)
答案 1 :(得分:0)
在尝试针对我的python脚本中的类似JSON模式进行验证时,我遇到了相同的错误。出于ChipJust提供的原因,我将false
更改为False
,并且对我有用。