2017-11-02 8 views
0

Djangoアプリケーションでサーバー側の検証用にjsonschemaライブラリ(http://python-jsonschema.readthedocs.io/en/latest/validate/)を使用していて、提供されたスキーマでJSONのサーバー側検証を実行しようとしています。しかし、私は、スキーマが "指定されたスキーマのどれでも有効ではない"というエラーを受け取ります。ここでjsonschemaライブラリ - スキーマが無効ですか?

は(それはクラスの「スキーマ」プロパティの「scores_ap」プロパティである)私のスキーマです:

class JSONListFieldSchemas: 
    """ 
    Schemas for all the JSON List Fields. 
    Each key represents the field name. 
    """ 
    schema = { 
     "scores_ap": { 
      "$schema": "http://json-schema.org/draft-06/schema#", 
      "title": "AP Scores", 
      "type": "array", 
      "items": { 
       "type": "object", 
         "properties": { 
         "exam": { 
          "type": "string" 
         }, 
         "score": { 
          "type": "integer", 
          "minimum": "1", 
          "maximum": "5", 
          "required": False 
         } 
         } 
      } 
     } 
} 

私はこのエラーを取得しています:

{'type': 'object', 'properties': {'score': {'minimum': '1', 'type': 'integer', 'ma 
ximum': '5', 'required': False}, 'exam': {'type': 'string'}}} is not valid under a 
ny of the given schemas 

Failed validating u'anyOf' in schema[u'properties'][u'items']: 
    {u'anyOf': [{u'$ref': u'#'}, {u'$ref': u'#/definitions/schemaArray'}], 
    u'default': {}} 

On instance[u'items']: 
    {'properties': {'exam': {'type': 'string'}, 
        'score': {'maximum': '5', 
           'minimum': '1', 
           'required': False, 
           'type': 'integer'}}, 
    'type': 'object'} 

私が使用しています

from jsonschema import validate 
from .schemas import JSONListFieldSchemas 
raw_value = [{"score": 1, "exam": "a"}] 
validate(raw_value, JSONListFieldSchemas.schema['scores_ap']) 

答えて

1

「必須」は、ブール値ではない配列にする必要があります。 また、「最大」と「最小」は文字列ではなく整数でなければなりません。

このようにしてみてください。

{ 
    "$schema": "http://json-schema.org/draft-06/schema#", 
    "title": "AP Scores", 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "exam": { 
     "type": "string" 
     }, 
     "score": { 
     "type": "integer", 
     "minimum": 1, 
     "maximum": 5 
     } 
    }, 
    "required": [ 
     "exam" 
    ] 
    } 
} 
+0

感謝を!私のコードのデータは配列でした - あるいは間違っていると宣言していますか? –

+0

はい、申し訳ありませんが、私の間違いは、よく見ていませんでした。私は私の答えを更新します。 – Pedro

関連する問題