我正在使用python-jsonschema进行json验证.我有一个对象,其中包含在rfc1766语言代码键中指定的本地化文本,如下所示:
"Description": {
"en": "English Description",
"sv": "Swedish Description",
"fr": "French Description"
},
Run Code Online (Sandbox Code Playgroud)
我在文档中读到我可以使用'format'属性来检查使用函数的自定义格式.所以,我写了一个方法,它接受一个字符串作为参数,如果它是一个RFC1766语言字符串,则返回True.
@_checks_drafts('rfc1766lang')
def rfc1766lang(instance):
"""some logic, return True if rfc1766"""
Run Code Online (Sandbox Code Playgroud)
但是我找不到任何关于如何应用它来对对象键进行验证的示例,而不是值.
这可能吗?
我尝试了类似下面的东西,但我没能成功
rfc1766_string_schema_v2 = {
'type': 'object',
'format': 'rfc1766lang',
'additionalProperties': False
}
Run Code Online (Sandbox Code Playgroud)
我知道如果我有如下json字符串会容易得多.但是,现在这不是一个选择.
"Description": [{
"lan": "en",
"text": "Description in English"
}, {
"lan": "sv",
"name": "Description in Swedish"
}]
Run Code Online (Sandbox Code Playgroud)
这是一个非常好的相关问题,因为这实际上是v5的建议语法的一部分,因此官方元架构也必须处理这个问题.
JSON Schema无法为对象键指定"格式".唯一的"验证"JSON Schema支持对象键patternProperties,它提供正则表达式.
对于语言代码,您可以做的最好的事情可能是:
{
"type": "object",
"patternProperties": {
"^[a-zA-Z]+(-[a-zA-Z]+)*$": {...}
},
"additionalProperties": false
}
Run Code Online (Sandbox Code Playgroud)
这将限制数据,以便只允许匹配该模式的属性 - 但这不是您正在寻找的完整验证,我担心.