JSON类型定义的Python实现

jtd的Python项目详细描述


jtd:Python的JSON验证

PyPI

jtdJSON Type Definition模式的Python实现 JSON语言。jtd主要提供两个功能:

  1. 根据JSON Typedef架构验证输入数据。在
  2. JSON Typedef模式的Python表示。在

通过这个包,您可以将JSON Typedef支持的验证添加到 或者您可以在JSON类型定义的基础上构建自己的工具。在

安装

您可以使用pip安装此软件包:

pip install jtd

文件

详细的API文档可在线获取,网址为:

https://jtd.readthedocs.io

有关一般JSON Typedef或JSON Typedef的更多高级文档 特别是与Python结合使用时,请参见:

基本用途

For a more detailed tutorial and guidance on how to integrate jtd in your application, see "Validating JSON in Python with JSON Typedef" in the JSON Typedef docs.

下面是一个示例,说明如何使用此包验证JSON数据 JSON Typedef架构:

^{pr2}$

高级用法:限制返回的错误

默认情况下,jtd.validate返回它发现的每个错误。如果你只关心 是否有任何错误,或者如果你不能显示更多的数字 如果出现错误,则可以使用jtd.validate获得更好的性能 max_errors选项。在

例如,从前面的相同示例中,将其限制为1个错误,我们 获取:

# Outputs:## [ValidationError(instance_path=[], schema_path=['properties', 'name'])]options=jtd.ValidationOptions(max_errors=1)print(jtd.validate(schema=schema,options=options,instance={'age':'43','phones':['+44 1234567',442345678],}))

高级用法:处理不受信任的架构

如果要对不信任的架构运行jtd,则应:

  1. 在上使用validate()方法,确保架构格式正确 jtd.Schema。这将检查诸如确保所有ref的 相应的定义。在

  2. 使用jtd.validate选项调用jtd.validate。JSON Typedef允许您编写 递归模式——如果要根据不可信的模式进行计算,则 在针对恶意输入进行计算时可能会进入无限循环, 比如这个:

    {"ref":"loop","definitions":{"loop":{"ref":"loop"}}}

    max_depth选项告诉jtd.validate接下来有多少ref 在放弃并抛出jtd.MaxDepthExceededError之前递归。在

下面是一个示例,说明如何使用jtd对不可信的数据进行评估 架构:

importjtd# validate_untrusted returns true if `data` satisfies `schema`, and false if it# does not. Throws an error if `schema` is invalid, or if validation goes in an# infinite loop.defvalidate_untrusted(schema,data):schema.validate()# You should tune max_depth to be high enough that most legitimate schemas# evaluate without errors, but low enough that an attacker cannot cause a# denial of service attack.options=jtd.ValidationOptions(max_depth=32)returnlen(jtd.validate(schema=schema,instance=data,options=options))==0}# Returns truevalidate_untrusted(jtd.Schema.from_dict({'type':'string'}),'foo')# Returns falsevalidate_untrusted(jtd.Schema.from_dict({'type':'string'}),None)# Throws "invalid schema"validate_untrusted(jtd.Schema.from_dict({'type':'nonsense'}),'foo')# Throws an instance of jtd.MaxDepthExceededErrorvalidate_untrusted({"ref":"loop","definitions":{"loop":{"ref":"loop"}}},None)

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像