📅  最后修改于: 2023-12-03 15:02:26.123000             🧑  作者: Mango
JSON 模式是用于验证 JSON 数据格式的一种描述性语言。它可以描述复杂的 JSON 对象的结构及其嵌套关系,用于描述 JSON 数据的模板,然后利用该模板来验证实际的 JSON 数据。
JSON 模式有两种语法格式,分别是 JSON Schema 和 JSON Path。其中 JSON Schema 是对 JSON 数据结构的完整描述,而 JSON Path 主要用于查找 JSON 数据中的部分内容。
JSON Schema 是用于描述 JSON 数据结构的语言。它可以描述 JSON 数据的结构、类型、值范围、数组元素类型及最大/最小数量等信息。JSON Schema 是一个标准,其定义和实现可以由各个厂商进行。
JSON Schema 使用 JSON 格式描述,通常包括以下属性:
$id
:指定模式的唯一标识符。$schema
:指定模式的版本和所使用的规范。title
:指定模式的标题。description
:指定模式的描述信息。type
:指定数据类型,如 "string"、"number"、"object" 等。properties
:指定对象属性及其约束条件。required
:指定对象必须包含的属性列表。minimum
:指定数字类型的最小值。maximum
:指定数字类型的最大值。enum
:指定允许的值列表。pattern
:指定字符串类型的正则表达式。以下是一个简单的 JSON Schema 例子:
{
"$id": "https://example.com/person.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 0
}
},
"required": ["firstName", "lastName"]
}
该模式描述了一个名为 "Person" 的对象,只有包含必需的 "firstName" 和 "lastName" 属性才是合法的,并且 "age" 属性的值必须大于等于 0。
JSON Path 是用于查询 JSON 数据的语言。它类似于 XPath,提供了一些常用的操作符用于过滤 JSON 数据集合,如通配符、过滤器、条件等。
JSON Path 目前有两个版本,分别是 JSON Path 0.8.0 和 JSON Path 1.0.0。它的基本语法包括:
$
:根对象。@
:当前对象。.
:属性访问符。[]
:下标访问符,支持通配符 "*"。()
:逻辑运算符,如 ==、!=、<、>、<=、>= 等。||
:逻辑或运算符。&&
:逻辑与运算符。!
:逻辑非运算符。.
:查询多个属性。以下是一个简单的 JSON Path 例子:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
$
: 根对象$..book[0].author
: 选择第一本书的作者$..book[?(@.category=='fiction')].title
: 选择所有类别为 fiction 的书籍的标题$..book[?(@.price < 10 && @.isbn)].title
: 选择所有价格小于 10 并且有 ISBN 号码的书籍标题$..book[0,1].title
: 选择第一本和第二本书的标题以上就是 JSON 模式的简要介绍,对于 JSON 数据的验证和查询,JSON 模式是非常有用的工具。