这篇文章主要介绍“python中怎么使用免费云主机域名JsonSchema库验证JSON数据结构”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中怎么使用JsonSchema库验证JSON数据结构”文章能帮助大家解决问题。有一个简单的json数据, 根据json数据格式编写jsonschema, 然后校验json数据每个字段是否是规定类型。type关键字是json模式的基础, 指定架构的数据类型。JSON Schema的核心定义了以下基本类型:stringNumeric typesobjectarraybooleannull这些类型在Python中对应的类型如下, 下表将JavaScript类型的名称映射到Python的相关类型:type关键字可以是一个字符串或数组:如果它是一个字符串, 那么它是上面一个基本能类型的名称如果它是一个数组, 它必须是一个字符串数组, 其中每个字符串是其中一个基本类型的名称, 每个元素都是唯一的。在这种情况下, 如果json代码段与任何给定类型匹配,则改代码段有效。以下做个type关键字的简单示例:{“type”: “number”}定义某个字段类型是number, 如果是 40, 43.0这样是校验通过的如果是”43”, 包含数字的字符串这样是无法校验通过的.{“type”: [“number”, ‘string’]}定义某个字段类型是number或string中一种如果是43, 或者 “我和你” 这样是校验通过的如果是[43, “我和你”], 这样是不通过的, 因为不接受结构化数据类型。在Python中, 对象对应的类型是dict类型。使用properties关键字定义对象上的属性(键值对)。例如, 我们要为由数字, 街道名称和街道类型组成的地址定义一个简单的模式默认情况下,properties不需要由关键字定义的属性。但是,可以使用required关键字提供所需属性的列表。required关键字接受一个或多个字符串的数组。每个字符串必须是唯一的。在以下定义用户记录的示例模式中,我们要求每个用户都有一个名称和电子邮件地址,但我们不介意他们是否提供了他们的地址或电话号码:可以使用minProperties和maxProperties关键字限制对象上的属性数 。这些中的每一个都必须是非负整数。数组用于有序元素。在Python中, array类似于 list或tuple类型,具体取决于用法。例如: [1,2,3,4,5][2, ‘dd’]数组的元素可能是任何东西, 但是,根据某些模式验证数组的项通常很有用。这里使用items和additionalItems关键字完成。在JSON中, 通常使用两种方式的数据列表验证: 任意长度的序列, 其中每个元素匹配相同的模式元组验证: 一个固定长度的序列,其中每个项目可能具有不同的模式, 在此用法中, 每个项目的索引(位置)对于如何解释值是有意义的,例如Python的tuple。列表验证对于任意长度的数组非常有用, 其中每个项都匹配相同的模式, 对于此类数组, 将items关键字设置为单个模式, 用该模式来验证数组中的所有项。注意: 这时items是单个模式, additionalItems关键字没有意义, 不应该使用它。例如下面的事例中我们定义数组中每个项都是一个数字如果是[1,2,3,4,5], pass如果是[1,2,3,’5’, 6] , false如果是[], pass当数组是项目集合时, 就需要元组验证。其中每个项目都有不同的模式, 并且每个项目的序数索引是有意义的。例如: 街道地址这样表示1600 Pennsylvania Avenue NW就有4中type[number, streent_name, street_type, direction]每个字段都有不同的架构number: 地址编号, 必须是数字street_name: 街道的名称, 必须是字符串street_type: 街道的类型, 应该是一组固定值的字符串direction: 地址的位置, 应该是来自不同值集的字符串为此我们将items关键字设置成一个数组, 其中每个项目都是一个与文档数组的每个索引相对应的模式, 也就是一个数组, 第一个元素模式验证输入数组的第一个元素. 第二个元素模式验证输入数组的第二个元素, 等等示例:如果是[1600, “宾夕法尼亚”, ‘Street’, “NW”], pass如果是[10,’等等’, ‘等等’], false并且在默认情况下, 添加其他项目也可以:[ 1600 , “宾夕法尼亚州” , “Street” , “NW” , “华盛顿” ]additionalItems关键字控制是否有效有超出了在架构中定义的数组的其他项目,如果设置为false, 则会不允许数组中的额外项。可以使用minItems和 maxItems关键字指定数组的长度。每个关键字的值必须是非负数。无论是进行List验证还是Tuple验证,这些关键字都有效。示例:使用uniqueItems关键字设置为true, 则数组中的每个项都是唯一的。json模式包含几个关键字,title,description和default, 不严格用来校验格式,但用来描述模式的一部分。在title和description管家你必须是字符串enum关键字用于限制值, 以一个固定的一组值, 它必须是一个必须包含一个元素的数组,其中每个元素都是唯一的。{ ‘type’ : ‘string’, ‘enum’: [‘red’, ‘green’]}如果检验字段的值在枚举中是通过的, 如果不是无法校验通过。JSON Schema包含一些用于将模式组合在一起的关键字,这并不意味着组合来自多个文件或JSON树的模式, 尽管这些工具有助于实现这一点,并在结构化复杂模式中进行了描述。例如, 在以下的模式, anyOf关键字用于表示给定值可能对任何给定的子模式有效。第一个子模式需要一个最大长度为5的字符串。第二个子模式需要一个最小值为0的数字。只要一个值对这些模式中的任何一个进行验证,它就被认为整个组合模式有效。{ ‘anyOf’: [ {‘type’: ‘string’, ‘maxLength’: 5}, {‘type’:’string’, ‘minimum’: 0 }]}用于组合模式的关键字是:allOf: 必须对所有子模式有效anyOf: 必须对任何子模式有效(一个或多个)oneOf: 必须仅对其中一个子模式有效要进行验证anyOf,给定数据必须对任何(一个或多个)给定子模式有效。如果是 “您好”, pass如果是 33, pass如果是 [‘ddd’, 33], false要进行验证oneOf,给定数据必须仅对其中一个给定子模式有效。如果是5的倍数, pass如果是3的倍数, pass如果是5和3的倍数, false要进行验证allOf,给定数据必须对所有给定的子模式有效。该$schema关键字用于声明JSON片段实际上是JSON模式的一部分。它还声明了针对该模式编写的JSON Schema标准的哪个版本。建议所有JSON模式都有一个$schema条目,该条目必须位于根目录下。因此,大多数情况下,您需要在架构的根目录下:“$ schema” : “http://json-schema.org/schema#”该模式和模式属性关键字使用正则表达式来表示约束。使用的正则表达式语法来自JavaScript(具体为ECMA 262)。但是,并未广泛支持该完整语法,因此建议您坚持使用下述语法的子集。单个unicode字符(下面的特殊字符除外)与自身匹配。^:仅匹配字符串的开头。$:仅匹配字符串的末尾。(…):将一系列正则表达式分组到单个正则表达式中。|:匹配|符号前面或后面的正则表达式。[abc]:匹配方括号内的任何字符。[a-z]:匹配字符范围。[^abc]:匹配未列出的任何字符。[^a-z]:匹配范围之外的任何字符。+:匹配前一个正则表达式的一个或多个重复。*:匹配前面正则表达式的零次或多次重复。?:匹配前一个正则表达式的零次或一次重复。+?,?,??:的,+和?预选赛都是贪婪的; 它们匹配尽可能多的文本。有时这种行为是不可取的,您希望匹配尽可能少的字符。{x}:完全x匹配前面正则表达式的出现次数。{x,y}:匹配前面正则表达式的至少x和最y多次出现。{x,}:匹配x前面正则表达式的出现次数或更多。{x}?,{x,y}?,{x,}?:上述表达式的惰性版本。示例:如果是 “555-1212”, pass如果是“(888)555-1212” , pass如果是“(888)555-1212分机532” , false有些模式可能是在几个地方都是通用的, 如果每次都重写会使模式更加冗长,以后更新也会很复杂, 我们可以用重用的方式来做。例如:定义客户记录, 每个客户都有可能同时拥有送货地址和账单地址, 地址总是相同的, 有街道地址, 城市, 州名。定义地址模式:我们重用上面的模式, 将其放在父模式下, 名为definitions:然后我们使用$ref关键字从其他地方引用此架构片段, 指向此模块的位置{ “$ ref” : “#/ definitions / address” }值 $ref 是一个名为 JSON Pointer的格式的字符串。‘#’引用当前文档,‘/’遍历文档中对象中的键, 因此“#/ definitions / address” 意味着:转到文档的根目录找到秘钥的值”definitions”在该对象中, 找到键的值”address”$ref也可以是相对或绝对的URI, 例如:{ “$ ref” : “definitions.json#/ address” }关于“python中怎么使用JsonSchema库验证JSON数据结构”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
这篇“C#的类型转换方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#的类型转换方法有哪些”文章吧。C# 提免费云主机域名供了下列内置…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。