【问题标题】:Jsonschema, validating object keys with a custom functionJsonschema,使用自定义函数验证对象键
【发布时间】:2013-10-11 20:00:15
【问题描述】:

我正在使用python-jsonschema 进行 json 验证。我有一个对象,其中包含在 rfc1766 语言代码键中指定的本地化文本,如下所示:

"Description": {
    "en": "English Description",
    "sv": "Swedish Description",
    "fr": "French Description"
},

I've read in the documentation 我可以使用“格式”属性来检查使用函数的自定义格式。所以,我写了一个方法,它接受一个字符串作为参数,如果它是一个 RFC1766 语言字符串,则返回 True。

@_checks_drafts('rfc1766lang')
def rfc1766lang(instance):
    """some logic, return True if rfc1766"""

但是我找不到任何关于如何应用它来验证对象键而不是值的示例。

这可能吗?

我尝试了类似下面的方法,但我无法成功

rfc1766_string_schema_v2 = {
    'type': 'object',
    'format': 'rfc1766lang',    
    'additionalProperties': False
}

我知道如果我有如下的 json 字符串会容易得多。但是,目前这不是一个选项。

"Description": [{
    "lan": "en",
    "text": "Description in English"
}, {
    "lan": "sv",
    "name": "Description in Swedish"
}]

【问题讨论】:

  • 我什至找不到如何将您的自定义格式检查器应用于一个值,这对我有很大帮助。您提供的文档链接仅显示如何使用预定义格式。

标签: python jsonschema


【解决方案1】:

这是一个非常好的和相关的问题,因为这实际上是 proposed syntax for v5 的一部分,所以官方元模式也必须处理这个问题。

JSON Schema 无法为对象键指定“格式”。对象键的唯一“验证”JSON Schema 是 patternProperties,它提供了一个正则表达式。

对于语言代码,你能做的最好的可能是:

{
    "type": "object",
    "patternProperties": {
        "^[a-zA-Z]+(-[a-zA-Z]+)*$": {...}
    },
    "additionalProperties": false
}

这将限制数据,以便只允许与该模式匹配的属性 - 但恐怕这不是您要寻找的完整验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多