Python JSON架构:输入格式不正确

Python JSON架构:输入格式不正确,python,json,jsonschema,Python,Json,Jsonschema,我使用的是基于jsonschema的Tornado_JSON,我的模式定义有问题。我尝试在一个在线模式验证器中修复它,问题似乎出在“additionalItems”:TrueTrue带大写字母T适用于python,并导致在线验证器中出现错误(Schema是无效的JSON。)。使用true在线验证器会很高兴,示例json会根据模式进行验证,但我的python脚本不再启动(NameError:name'true'未定义)。这个问题能解决吗 @schema.validate( """i

我使用的是基于jsonschema的Tornado_JSON,我的模式定义有问题。我尝试在一个在线模式验证器中修复它,问题似乎出在
“additionalItems”:True
True
带大写字母
T
适用于python,并导致在线验证器中出现错误(
Schema是无效的JSON。
)。使用
true
在线验证器会很高兴,示例json会根据模式进行验证,但我的python脚本不再启动(
NameError:name'true'未定义
)。这个问题能解决吗

@schema.validate(
        """input_schema={
            'type': 'object',
            'properties': {
                        'DB': {
                            'type': 'number'
                        },
                        'values': {
                            'type': 'array',
                            'items': [
                                {
                                    'type': 'array',
                                    'items': [
                                        {
                                            'type': 'string'
                                        },
                                        {
                                            'type': [
                                                'number',
                                                'string',
                                                'boolean',
                                                'null'
                                            ]
                                        }
                                    ]
                                }
                            ],
                            'additionalItems': true
                        }
            }
        },
        input_example={
            'DB': 22,
            'values': [['INT', 44],['REAL', 33.33],['CHAR', 'b']]
        }"""
)

我根据您的评论更改了它(带有json.loads()的外部文件)。完美的谢谢。

错误源于试图将内置Python数据类型放入JSON模式。后者是用于检查类型一致性的模板语法,不应保存实际数据。相反,在
input\u模式下
您需要将
的“additionalItems”
定义为
{“type”:“boolean”}
,然后将其添加到
input\u示例
中的测试JSON中,之后使用一个布尔值进行测试

另外,我对Tornado_JSON不太熟悉,但将
“additionalItems”
放在
“values”
属性中似乎不符合模式定义语言。把它提高一个层次

更具体地说,我认为您要做的应该是:

"values": {
    ...value schema definition...
}
"additionalItems": {
    "type": "boolean"
}
输入示例将变成:

input_example={
    "DB": 22,
    "values": [['INT', 44],['REAL', 33.33],['CHAR', 'b']],
    "additionalItems": true
}

将架构放入三重引号字符串或外部文件中,然后使用
json.loads()
解析它。使用小写字母拼写。

谢谢比约森。它的意思是作为一个模式属性,用于允许多个项目,如前所述。啊,在这种情况下,问题是Python试图在
input\u模式
之后{…}创建一个字典。如果您用小写的
true
三次引用整个架构定义,它应该可以工作。