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 Spring启动启用HTTPS   actionscript 3 java中的这个[“var”+“name”]   java只匹配给定集合中一个字符的一个匹配项   java Hibernate:防止角色表中出现多个相同的条目   javajersey+Spring注入servlet请求   java HtmlEditor javafx失去焦点   java Apache Wicket AjaxRequestTarget ListView组件未刷新或更新   mysql java。无法将lang.String转换为java。sql。时间戳   java将巨大的整数文件(在一行中)拆分为具有内存限制的已排序块   安卓如何完全关闭proguard?   安装Eclipse和Android SDK后的java“无AVD可用”消息   java动态显示图像视图   java在Spring中还有哪些WebsocketClient实现?   java Glassfish需要很长时间才能重新启动   使用Java简单串行连接器将pc与arduino连接   java如何在camel文件组件配置中结合readLockCheckInterval和maxMessagesPerPoll?   单击Android时的java预览图像   java如何将字节数组转换为ByteArrayOutputStream