当AdditionalProperties设置为false时,python jsonschema验证失败

时间:2018-09-27 19:04:35

标签: python json jsonschema

我正在尝试在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,我不会收到错误,但对我来说当然不起作用,因为它的验证性较差。

任何人都可以解释为什么我会收到此错误吗?

2 个答案:

答案 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,并且对我有用。