json schema多种形式_Json Schema简介

本文详细介绍了Json Schema的使用,包括"type"关键字及其适用的字符串、数值、布尔、空值等简单类型,以及如何通过其他关键字如"properties"、"items"、"additionalItems"等对复杂数据结构进行约束。Json Schema提供了丰富的规则来定义Json数据的合法性,确保了Web API接收到的请求数据的正确性。
摘要由CSDN通过智能技术生成

1. 引言

什么是Json Schema? 以一个例子来说明

假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友。一个请求的例子如下:

{

"city" : "chicago",

"number": 20,

"user" : {

"name":"Alex",

"age":20

}

}

在上面的例子中,web api要求提供city,number,user三个成员,其中city是字符串,number是数值,user是一个对象,又包含了name和age两个成员。

对于api来说,需要定义什么样的请求合法,即什么样的Json对于api来说是合法的输入。这个规范可以通过Json Schema来描述,对应的Json Schema如下。

{

"type": "object",

"properties": {

"city": { "type": "string" },

"number": { "type": "number" },

"user": {

"type": "object",

"properties": {

"name" : {"type": "string"},

"age" : {"type": "number"}

}

}

}

}

什么是Json Schema?

Json Schema定义了一套词汇和规则,这套词汇和规则用来定义Json元数据,且元数据也是通过Json数据形式表达的。Json元数据定义了Json数据需要满足的规范,规范包括成员、结构、类型、约束等。

本文后面的部分是简要介绍Json Schema定义的这些规则,以及如何用这些规则描述规范。

Json Schema定义了一系列关键字,元数据通过这些关键字来描述Json数据的规范。其中有些关键字是通用的;有些关键字是针对特定类型的;还有些关键字是描述型的,不影响合法性校验。本文的主要内容就是介绍这些关键字的应用。

2. 类型关键字

首先需要了解的是"type"关键字,这个关键字定义了Json数据需要满足的类型要求。"type"关键字的用法如下面几个例子:

{"type":"string"}。规定了Json数据必须是一个字符串,符合要求的数据可以是

"Today is a good day."

"I love you"

{"type" : "object"}。规定了Json数据必须是一个对象,符合要求的数据可以是

{"name" : "Alexander", "age" : 98}

{}

{"type" : "number"}。规定了Json数据必须是一个数值,符合要求的数据可以是。Java Script不区分整数、浮点数,但是Json Schema可以区分。

2

0.5

{"type": "integer"}。要求数据必须是整数。

2

{"type" : "array"}。规定了Json数据必须是一个数组,符合要求的数据可以是

["abc", "cdf"]

[1, 2, 3]

["abc", 25, {"name": "Alexander"} ]

[]

{"type" : "boolean"}。这个Json Schema规定了Json数据必须是一个布尔,只有两个合法值

true

false

{"type" : "null"}。null类型只有一个合法值

null

3. 简单类型

这部分介绍类型特定的关键,包括字符串、数值、布尔、空值几种基本类型。

3.1 字符串

Json合法的字符串

"Today is a good day."

对应的Json Schema

{"type": "string"}

可以进一步对字符串做规范要求。字符串长度、匹配正则表达式、字符串格式。

3.1.1 字符串长度

关键字: minLength, maxLength

可以对字符串的最小长度、最大长度做规范。

{

"type" : "string",

"minLength" : 2,

"maxLength" : 3,

}

3.1.2 正则表达式

关键字: pattern

可以对字符串应满足的Pattern做规范,Pattern通过正则表达式描述。

{

"type" : "string",

"pattern" : "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$",

}

3.1.3 字符串For

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值