簡體   English   中英

如何從架構中的json文件中獲取缺少的字段,反之亦然

[英]How can I get missing fields from json file in schema and vice versa

我已經安裝了jsonschema使用pip install jsonschema

from jsonschema import validate

schema_data = {
    "type" : "object",
    "properties" : {
        "price" : {"type" : "number"},
        "name" : {"type" : "string"},
        "additional" : {"type" : "number"},
        },
    }

json_data = {"name" : "Eggs", "price" : 34.99, "new": 90}

我上面有schema_datajson_data ,它們只是驗證數據類型。

下面additional是一個額外的領域schema_data這是在缺席json_data ,以及new出現在json_data這是不存在的schema_data

如何列出json_data中缺少的additional字段以及json_data new丟失schema_data

在JSON模式中,默認情況下不需要屬性,您的模式所做的只是聲明如果存在該屬性它們必須是什么類型。 因此,對於確認該標志additional丟失,你需要標記該鍵為必需的屬性首先,通過增加required列出其名稱:

schema_data = {
    "type" : "object",
    "properties" : {
        "price" : {"type" : "number"},
        "name" : {"type" : "string"},
        "additional" : {"type" : "number"},
        },
    "required": ["price", "name", "additional"]
}

現在,因為驗證將失敗的JSON數據additional丟失:

>>> validate(json_data, schema_data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../site-packages/jsonschema/validators.py", line 541, in validate
    cls(schema, *args, **kwargs).validate(instance)
  File "/.../site-packages/jsonschema/validators.py", line 130, in validate
    raise error
jsonschema.exceptions.ValidationError: 'additional' is a required property

Failed validating 'required' in schema:
    {'properties': {'additional': {'type': 'number'},
                    'name': {'type': 'string'},
                    'price': {'type': 'number'}},
     'required': ['price', 'name', 'additional'],
     'type': 'object'}

On instance:
    {'name': 'Eggs', 'new': 90, 'price': 34.99}

為了增加更多的按鍵無效,你需要設置additionalPropertiesfalse ; 默認是允許額外的屬性:

schema_data = {
    "type" : "object",
    "properties" : {
        "price" : {"type" : "number"},
        "name" : {"type" : "string"},
        "additional" : {"type" : "number"},
        },
    "required": ["price", "name", "additional"],
    "additionalProperties": False
}

然而, additional人仍下落不明,的加入new關鍵是沒有找到當您使用validate()因為發現的第一個錯誤會拋出一個例外。

要獲取所有模式驗證錯誤,請為模式創建一個驗證器對象,然后使用IValidator.iter_errors()方法列出所有發現的錯誤:

from json_schema.validators import validator_for

validator = validator_for(schema_data)(schema_data)  # get class, create instance
for error in validator.iter_errors(json_data):
    print(error)

現在您可以獲得有關每個錯誤的信息:

'additional' is a required property

Failed validating 'required' in schema:
    {'additionalProperties': False,
     'properties': {'additional': {'type': 'number'},
                    'name': {'type': 'string'},
                    'price': {'type': 'number'}},
     'required': ['price', 'name', 'additional'],
     'type': 'object'}

On instance:
    {'name': 'Eggs', 'new': 90, 'price': 34.99}
Additional properties are not allowed ('new' was unexpected)

Failed validating 'additionalProperties' in schema:
    {'additionalProperties': False,
     'properties': {'additional': {'type': 'number'},
                    'name': {'type': 'string'},
                    'price': {'type': 'number'}},
     'required': ['price', 'name', 'additional'],
     'type': 'object'}

On instance:
    {'name': 'Eggs', 'new': 90, 'price': 34.99}

循環中的每個error對象都是ValidatorError異常對象 ,該對象具有一系列屬性,可以幫助您准確地用代碼找出問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM