📜  JSON-模式(1)

📅  最后修改于: 2023-12-03 15:02:26.123000             🧑  作者: Mango

JSON 模式

JSON 模式是用于验证 JSON 数据格式的一种描述性语言。它可以描述复杂的 JSON 对象的结构及其嵌套关系,用于描述 JSON 数据的模板,然后利用该模板来验证实际的 JSON 数据。

JSON 模式有两种语法格式,分别是 JSON Schema 和 JSON Path。其中 JSON Schema 是对 JSON 数据结构的完整描述,而 JSON Path 主要用于查找 JSON 数据中的部分内容。

JSON Schema

JSON Schema 是用于描述 JSON 数据结构的语言。它可以描述 JSON 数据的结构、类型、值范围、数组元素类型及最大/最小数量等信息。JSON Schema 是一个标准,其定义和实现可以由各个厂商进行。

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 Path 是用于查询 JSON 数据的语言。它类似于 XPath,提供了一些常用的操作符用于过滤 JSON 数据集合,如通配符、过滤器、条件等。

JSON Path 语法

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 模式是非常有用的工具。