json-schema简介与应用

作者: 城下秋草 | 来源:发表于2018-08-15 00:30 被阅读4次

Json?

了解json schema首先要知道什么是json?
json 是 JavaScript Object Notation 的缩写,它是一种简化的数据交换格式,是目前互联网服务间进行数据交换最常见的一种交换格式,具有简洁、可读性好等特点。

在json中常见的数据类型主要包括

  • object

{ "key1": "value1", "key2": "value2" }

  • array

[ "first", "second", "third" ]

  • number

42
3.1415926

  • string

"This is a string"

  • boolean

true
false

  • null

null

一个示例json格式比如:

{
 "fruits": [ "apple", "orange", "pear" ],
 "vegetables": [
   {
     "veggieName": "potato",
     "veggieLike": true
   },
   {
     "veggieName": "broccoli",
     "veggieLike": false
   }
 ]
}

何为Json Schema

如前文所述,json是目前应用非常广泛的数据交换格式。既然是用于数据交换的格式,那么就存在数据交换的双方。如何约定或校验对方的数据格式是符合要求的,就成了服务交互需要解决的一个问题。所以Json Schema就是用来定义json数据约束的一个标准。根据这个约定模式,交换数据的双方可以理解json数据的要求和约束,也可以据此对数据进行验证,保证数据交换的正确性。

目前最新的Json-schema版本是draft 7,发布于2018-03-19。下面我们就以官网的一个实例来看看Json-schema是如何进行数据约束以及其应用

如下是一个schema实例:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/product.schema.json",
  "title": "Product",
  "description": "A product from Acme's catalog",
  "type": "object",
  "properties": {
    "productId": {
      "description": "The unique identifier for a product",
      "type": "integer"
    },
    "productName": {
      "description": "Name of the product",
      "type": "string"
    },
    "price": {
      "description": "The price of the product",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "tags": {
      "description": "Tags for the product",
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "dimensions": {
      "type": "object",
      "properties": {
        "length": {
          "type": "number"
        },
        "width": {
          "type": "number"
        },
        "height": {
          "type": "number"
        }
      },
      "required": [ "length", "width", "height" ]
    }
  },
  "required": [ "productId", "productName", "price" ]
}

分析说明:

  "$schema": "http://json-schema.org/draft-07/schema#",

说明当前使用的schema版本,可以不包含

  "$id": "http://example.com/product.schema.json",

当前schema的唯一id标识,一般指向一个自主域名。方便后续引用,可以不包含

  "title": "Product",

当前schema的标题,简要描述信息,可不包含

"description": "A product from Acme's catalog",

详细描述信息,可不包含

"type": "object",

约束对象是object,也就是在 { } 中的数据

"properties": {
    "productId": {
      "description": "The unique identifier for a product",
      "type": "integer"
    },

object中具体属性的约束,description是描述信息,不产生具体约束。
type约束productid属性类型为整型

 "productName": {
      "description": "Name of the product",
      "type": "string"
    },

约束productName属性类型为字符型

    "price": {
      "description": "The price of the product",
      "type": "number",
      "exclusiveMinimum": 0
    },

约束price属性类型为数字型,可以是整型或浮点型。
exclusiveMinimum约束该数字>0(不包含0)

    "tags": {
      "description": "Tags for the product",
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "uniqueItems": true
    },

约束tag属性是array数组。items是数组项约束,这里约束数组项均为字符型
minItems数组至少包含1项。
uniqueItems约束数组中每项不得重复

    "dimensions": {
      "type": "object",
      "properties": {
        "length": {
          "type": "number"
        },
        "width": {
          "type": "number"
        },
        "height": {
          "type": "number"
        }
      },
  "required": [ "length", "width", "height" ]
    }
  },

约束dimensions嵌套对象,其中length,width,height均为数字类型
且这三个字段在dimensions对象中必须包含

 "required": [ "productId", "productName", "price" ]
}

当前数据对象必须包含productId,productName,price三个字段

以上是对Json-Schema的简要说明,详细介绍后续再奉上

相关文章

  • json-schema简介与应用

    Json? 了解json schema首先要知道什么是json?json 是 JavaScript Object ...

  • yapi中使用json-schema mock数据

    1. 基本的json-schema mock 首先,我们建立一个简单的json-schema,如下图所示: 该sc...

  • json-schema-vue3

    src/components/json-schema/index.vue 使用 效果图

  • SPI简介与应用

    1、SPI简介: SPI的全称为(Service provider interface)是JDK内置的一种服务提供...

  • json-schema

    一、需要注意的几点 properties :很多属性不需要约束,就没必要写在properties里 尽量使代码可复...

  • 应用简介

    关注热播影视聚焦潮流艺人 紧追时尚前沿搜罗新潮产品 星炼app年轻人的聚集地 【星TV】 放眼娱乐行业讯息汇集影视...

  • java动态代理

    目录: 简介 jdk动态代理 cglib动态代理 jdk动态代理与cglib的区别 应用spring的aop 简介...

  • Android体系复习---广播

    一、广播简介 Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这...

  • GitChat 文章目录

    城下秋草 GitChat 测试文章链接: 自动化测试相关: 《接口校验利器:Json-Schema 详解》 《颜...

  • 通过Emscripten编译成一个Dependent类型的WAS

    简介 Dependent类型的WASM应用与Standalone类型有所不同,在该类型应用中一般都包含着大量与浏览...

网友评论

    本文标题:json-schema简介与应用

    本文链接:https://www.haomeiwen.com/subject/fxepbftx.html