2017-12-21 16 views
0

、私はこのような複雑なJSONデータ構造を検証する必要があります。Pythonのjsonschema検証

datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}} 

だから私は

schemainstances = { 

        "definitions" :{ 
         "instance":{ 
         "type":"object", 
         "properties": { 
          "user": {"type":"string"}, 
          "dirname": {"type":"string"}, 
          "blah": {"type":"string"} 

         }, 
         "required" : ["user","blah"] 
         } 
        }, 
        "type":"object", 
        "patternProperties": { 
        "^[a-z]+$": {"$ref": "#/definitions/instance"} 
        } 

} 

このスキーマに対してjsonschemaの検証機能を使用する私の目的は、それがいけないということですこのjson構造を次のように検証します。

  1. ユーザー属性は、文字列である必要があります。
  2. apache1の文字列も文字列でなければなりません

私は間違っていましたか? は、私はあなたのpatternPropertiesエントリが正規表現 "^ [-Z] + $" を持っている

EDITコード

import json 
from jsonschema import validate 
schemainstances = { 

        "definitions" :{ 
         "instance":{ 
         "type":"object", 
         "properties":{ 
          "user": {"type":"string"}, 
          "dirname": {"type":"string"}, 
          "blah": {"type":"string"} 

         }, 
         "required" : ["user","blah"] 
         } 
        }, 
        "type":"object", 
        "patternProperties":{ 
        "^[a-z]+$": {"$ref": "#/definitions/instance"} 
        } 

} 



datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}} 


retour = validate(datainstances,schemainstances) 

print(retour) 
+0

コードを表示できますか?期待していなかったエラーやその他の結果はどうでしたか? – Phil

+0

私はそれが妥当性検査に合格するようにします: –

+0

ここではオンラインバリデーターを使用しています:https://www.jsonschemavalidator.net/もあなたのデータのバリデーションを示しています。あなたのコードは明らかに一貫しています。あなたのスキーマがなぜ検証されないのか分かりません。 – Phil

答えて

0

を見ていないものです。キーは「apache1」です。このキーには桁が含まれているため、正規表現と一致しません。 patternPropertiesが一致しないため、データに適用される制約はありません。すべてが検証されます。 「^ [a-z0-9] + $」や「^ [a-z] + [0-9] $」や「^ [a-z]」が好きかもしれません。

+0

ty Jason私はこれを試してみます。どうやら私は目を全開にした –

関連する問題