当前位置: 首页 > Web前端 > HTML

2023不懂JSONSchema-Basic

时间:2023-03-28 15:34:48 HTML

什么是JSONJSON在前端的日常开发中大家很熟悉,但是很多时候我们和后端的数据交互都是通过JSON来传输的。那么到底什么是JSON呢?JSON(JavaScriptObjectNotation,JSObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机制造商协会,欧洲计算机协会制定的js规范)的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据。简单和清晰的层次结构使JSON成为一种理想的数据交换语言。便于人的读写,也便于机器解析生成,能够有效提高网络传输的效率。简单的说:JSON指的是JavaScriptObjectNotation(JavaScript对象表示法)JSON是一种轻量级的数据交换格式JSON是自描述的,易于理解JSON是语言无关的*什么是JSONSchemaJSONSchema,从字面上我们可以知道它有一个接近与JSON的关系。那到底是什么呢?JSONSchema是一个词汇表,允许您注释和验证JSON文档。JSONSchema,也称为JSONSchema,是一项提议的IETF标准,可用于描述和验证您的JSON数据。JSONSchema定义了一套词汇表和规则,用于定义JSON元数据,元数据也以JSON数据的形式表示。JSON元数据定义了JSON数据需要满足的规范,包括成员、结构、类型、约束等,我们可以用它来验证我们的JSON数据是否有效,是否符合规范。它的工作方式有点像TypeScript对JavaScript的作用。其主要作用:描述JSON数据格式提供清晰的人类可读文档验证数据自动测试和验证提交数据的质量JSONSchema示例假设我们现在有一个JSON数据:{"productId":1,"productName":"Agreendoor","price":12.50,"tags":["home","green"]}让我们声明一个相应的JSONSchema如下:{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://example.com/product.schema.json","title":"Product","description":"Aproduct","type":"object","properties":{"productId":{"description":"产品的唯一标识符","type":"integer"},"productName":{"description":"商品名称","type":"string"},"price":{"description":"商品价格产品","type":"number","exclusiveMinimum":0},"tags":{"description":"产品标签","type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true}},"required":["productId","productName","price"]}JSONSchemakeywords让我们看开头的几个关键字:$schema关键字:用于声明当前JSONSchema使用的是哪个版本的JSONSchema标准,在声明JSONSchema的时候尽量加上,虽然不是必须的注意:如果使用了这个关键字,其他值必须使用该值官方提供的,不能自己写$id关键字:为JSONSchema实例声明一个唯一标识,在解析$ref的URI时可以用来声明一个baseURI。最好的做法是,Everytop-levelJSONSchema实例应该将$id设置为自己控制的域内的绝对URItitle和description关键字:仅用于描述目的,可以省略type关键字:使用to验证JSON数据第一个约束,在上面的例子中,JSON数据必须是一个对象。上面的关键字是对Schema的一些设置和注释,对应的JSON数据中各个字段的描述在properties中,具体各个格式的字段相关的描述后面会详细说明。我们先来看最后一个关键字required,用来描述JSON数据中有哪些字段是必需的,对应的值必须是数组格式。比如我们更新一篇文章时,submitted字段中的文章id是必填项;上述JSON数据中的productId是必需的。我们来看看JSON数据中不同类型字段对应的描述关键字。JSON数据中每个字段的描述对应一个类型,类型对应的基本类型主要包括:类型描述字符串字符串类型、双引号包裹的Unicode字符和反斜杠转义字符数字数字类型,包括整型(int)和浮点数类型(float)booleanBoolean类型,true或false对象类型,无序key:value对collection数组array类型,有序值序列null空类型其中,对于string、number、array和object类型,有一些相关的关键字:string关键字描述schemavalidvaluejsondatavalidationmaxLength最大长度大于或等于0,整数字符串的长度必须小于或等于该值minLength整数字符串的最小长度必须大于或等于这个值pattern模式字符串必须是有效的正则表达式。当字符串匹配正则表达式时,使用number关键字来描述SchemaValidvaluejson数据验证MultipleOf是大于0的整数倍。当一个JSON实例的值是整数倍时,验证最大值时,它是一个JSON数字。当JSON实例的值小于或等于maximum时,验证exclusiveMaximum包含最大布尔值。它必须与最大值一起使用。当为true时,JSON实例不能等于maximum的值。minimum最小值是一个JSON数字。当JSON实例的值大于等于minimum时,验证exclusiveMinimum包含最小boolean值,必须和minimum一起使用。当它为真时,JSON实例不能等于最小值。array关键字描述SchemaValidvaluejson数据验证项定义元素必须是Schema实例对象或Schema实例对象数组,用于定义数组中的元素类型additionalItems附加项验证布尔值或Schema实例对象当items是一个Schema实例数组,additionalItems为false,json数据长度必须小于等于items长度。如果additionalItems是Schema实例,items关键字指定的Schema实例数组不匹配赋值的其他元素必须符合实例的maxItems长度限制大于等于0整数数组实例长度必须小于等于maxItems值minItems长度限制大于等于0整数数组实例长度必须大于等于等于minItems值uniqueItemsuniquevalue布尔值,当uniqueItems为true时默认值为false,数组实例不能有重复值object关键字描述Schema有效值json数据验证属性属性值必须全部为有效Schema实例objects用于定义属性列表maxPropertiesmaximumattributesnumber大于等于0的整数对象实例的属性个数必须小于等于maxProperties的值minProperties整数对象实例的属性个数必须大于等于minProperties值的一个元素,不能有重复值数组中。对象实例必须具有所有必需的属性。patternProperties必须是一个有效的Scheme实例对象。模式实例。指定与正则表达式匹配的属性的验证规则。additionalProperties检查Scheme实例对象或布尔值是否为false。不允许有除properties和patternProperties匹配的属性以外的属性。如果它是一个Scheme实例,则任何匹配的属性都必须符合Scheme。另外还有一些通用的Keyword关键字描述SchemaValidValuejsonDataValidationenum数据枚举必须是一个数组,数组中必须至少有一个元素且不能有重复值。当枚举列表中存在json实例的值时,验证类型定义的类型可以是字符串或字符串数??组,且该值必须在JSON基本类型范围内,以验证该类型是否为JSON实例符合定义allOf数据验证必须是Schema实例对象的数组,并且数组中必须至少有一个元素且不能有重复项。当JSON实例满足所有Schemas时,通过anyOf数据的验证来验证同一个allOfJSON实例。当只满足其中一个Schemas时,非数据验证必须是一个有效的Schema实例对象。如果不满足JSONSchema的定义,则通过校验const数据来校验JSON基本类型。如果JSON实例的值与该关键字指定的值相同,则验证通过。小结本次主要是对JSONSchema与JSON的关系,以及JSONSchema的一些基本内容进行了初步的了解。JSONSchema的构成主要是依靠一些关键字来确定一个JSON数据结构的描述。看到这里,我们可能还没有意识到它的作用。后续我们会一一了解它的作用,以及在哪些场景下为我们提供便利,敬请期待。参考:1.JSONSchema简介2.JSONSchema参考3.在线JSON转JSONSchema