3

json 検証にpython-jsonschemaを使用しています。次のように、rfc1766 言語コード キー内で指定されたローカライズされたテキストを含むオブジェクトがあります。

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

「format」属性を使用して、関数を使用してカスタム形式をチェックできることをドキュメントで読みました。そこで、文字列を引数に取り、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"
}]
4

1 に答える 1

6

これは実際にはv5 の提案された構文の一部であるため、非常に適切で適切な質問です。したがって、公式のメタスキーマもこれに対処する必要があります。

JSON スキーマでは、オブジェクト キーの「形式」を指定できません。JSON スキーマがオブジェクト キーに対してサポートする唯一の「検証」はpatternProperties、正規表現を提供する です。

言語コードについては、おそらく次のようなことができます。

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

それはデータを制限して、そのパターンに一致するプロパティのみが許可されるようにしますが、それはあなたが探している完全な検証ではありません.

于 2013-10-12T00:24:40.933 に答える