验证json结构数据的方法集合
jsonmodel的Python项目详细描述
jsonmodel
json结构化数据验证方法的集合
Downloads: http://pypi.python.org/pypi/jsonModel Source: https://github.com/collectiveacuity/jsonModel Documentation: https://collectiveacuity.github.io/jsonModel/
简介
json模型的设计是为了方便对已声明的json数据模型实现数据验证的过程。jsonmodel类通过依赖json本身的体系结构来验证数据类型、需求和默认值,提供了比当前可用的其他模式强制模块更直观的声明过程。
安装
来自PYPI:
$ pip install jsonmodel
来自github:
$ git clone https://github.com/collectiveacuity/jsonmodel $ cd jsonmodel $ python setup.py install
开始
此模块使用自有效的架构声明作为描述数据需求的方法。因此,对于许多数据模型,可以通过使用schema键的示例声明来实现完全验证:
{ "schema": { "userID": "gY3Cv81QwL0Fs", "datetime": 1456000345.543713, "active": true, "address": { "city": "New Orleans", "region": "LA", "postal_code": "", "country": "United States" } } }
[在此模型中,输入必须包含所有四个顶级键的值,并且每个值必须与模型中的数据类型相对应。因此,输入必须有一个带字符串的userid字段、一个带数字的datetime字段、一个带布尔值的活动键和一个address字段必须是一个字典,它本身包含city、region和country值。由于是空的,邮政编码是可选的。但是,如果为邮政编码提供了值,则该值必须是字符串。]
除了直观的自有效模式声明之外,jsonmodel还提供了一种丰富的方法,通过一个附带的组件映射来进一步细化模型中任何属性的条件,该映射的键名对应于需要额外验证的schema属性的路径:
{ "schema": { ... }, "components": { "userID": { "min_length": 13, "max_length": 13, "must_not_contain": [ "[^\\w]", "_" ] }, "address.city": { "discrete_values": [ "New Orleans", "New York", "Los Angeles", "Miami" ], "required_field": false } } }
[在此模型中,检查输入的过程还将检查组件字典中指定的路径,以确保值不违反组件中声明的属性的任何其他属性。当它们可能与模式示例中声明的属性冲突时,组件映射中的条件将取代。因此,在这种情况下,地址包含城市密钥值的要求已被关闭。但如果提供了一个城市,它必须与提供的四个城市值之一匹配。同样,userid中提供的任何值的长度不得超过或小于13个字符,并且只能由字母数字字符组成。]
此模块还验证模型声明本身的体系结构,以方便模型设计过程,并确保没有模型违反模块的规则。除了模块文档外,还提供错误报告以标识适用于任何给定属性的条件范围。
申报型号:
{ "schema": { "property": "value" }, "components": {}, "title": "my cool data model", "description": "model for performance analytics records of my sweet app", "metadata": { "version": "1.1.1" }, "url": "https://collectiveacuity.com/api/mycoolresource?jsonmodel=true", "max_size": 1024, }
[除schema之外的所有字段都是可选的]
要导入架构:
import json sample_schema = json.loads(open('sample-schema.json').read())
初始化类对象:
from jsonmodel.validators import jsonModel valid_model = jsonModel(sample_schema)
根据模型声明验证输入:
valid_model.validate(input)
要针对单个组件验证输入:
path_to_root = 'dot.path[2].field' valid_model.validate(input, path_to_root)
要处理无效输入:
try: valid_model.validate(invalid_input) except InputValidationError as err: assert err.error['error_code'] > 4000
要自定义错误消息:
input_title = 'Property field in input' valid_model.validate(input, path_to_root, input_title)
根据查询条件筛选有效输入:
query_criteria = { 'dot.path[2].field': 'exact value' } assert valid_model.query(query_criteria, valid_input) query_criteria = { 'dot.path[2].field': { 'excluded_values': [ 'exact value' ] } } assert not valid_model.query(query_criteria, valid_input)
要生成模型条件的HTML文档:
from jsonmodel.extensions import tabulate tabulate(valid_model) html_table = valid_model.tabulate()
进一步阅读
有关如何使用jsonmodel的更多详细信息,请参阅 Reference Documentation on GitHub