验证json结构数据的方法集合

jsonmodel的Python项目详细描述


https://img.shields.io/pypi/v/jsonmodel.svghttps://img.shields.io/pypi/l/jsonmodel.svg

简介

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java与Groovy正则表达式匹配混淆   java控制台未定义为JSNI   主目录中的java指针异常   java如何获取hashmap中的arrayList的大小   ApachePOI用于文本,Java代码中的word doc(.docx)中没有进行追加   Ruby对象到Java对象   JavaSpringJPA哈希集只返回一个值   Java在执行由配置了精确类路径参数的mavenjarpluin生成的可执行jar时无法找到依赖项   java我试图在画布上写一个文本,但什么也没发生   java HTTP 404源服务器找不到目标资源的当前表示形式,或者不愿意透露存在该表示形式。不起作用   java提取小数点后的最后一个数字   oop Java:无法访问对象的元素   PHP URL中RecyclerView中的java句柄空异常   不调用OnCreateViewHolder的java Update RecyclerView适配器项