[英]How to convert csv file so it can be JSON serializable and vice versa?
[英]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_data
和json_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}
為了增加更多的按鍵無效,你需要設置additionalProperties
到false
; 默認是允許額外的屬性:
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.