超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

json之JsonSchema教程

liguoquan
2025年1月14日 16:33 本文熱度 982
簡(jiǎn)介

JSON Schema是基于JSON格式,用于定義JSON數(shù)據(jù)結(jié)構(gòu)以及校驗(yàn)JSON數(shù)據(jù)內(nèi)容。 JSON Schema官網(wǎng)地址:json-schema.org/

個(gè)人觀點(diǎn):JsonSchema類(lèi)似于xml的schema和DTD的作用,主要是用來(lái)規(guī)范json的格式。

關(guān)鍵字及其描述

關(guān)鍵字描述
$schema表示該JSON Schema文件遵循的規(guī)范
title為該JSON Schema文件提供一個(gè)標(biāo)題
description關(guān)于該JSON Schema文件的描述信息
type表示待校驗(yàn)元素的類(lèi)型(例如,最外層的type表示待校驗(yàn)的是一個(gè)JSON對(duì)象,內(nèi)層type分別表示待校驗(yàn)的元素類(lèi)型為,整數(shù),字符串,數(shù)字)
properties定義待校驗(yàn)的JSON對(duì)象中,各個(gè)key-value對(duì)中value的限制條件
requiredv定義待校驗(yàn)的JSON對(duì)象中,必須存在的key
minimum用于約束取值范圍,表示取值范圍應(yīng)該大于或等于minimum
exclusiveMinimum如果minimum和exclusiveMinimum同時(shí)存在,且exclusiveMinimum的值為true,則表示取值范圍只能大于minimum
maximum用于約束取值范圍,表示取值范圍應(yīng)該小于或等于maximum
exclusiveMaximum如果maximum和exclusiveMaximum同時(shí)存在,且exclusiveMaximum的值為true,則表示取值范圍只能小于maximum
multipleOf用于約束取值,表示取值必須能夠被multipleOf所指定的值整除
maxLength字符串類(lèi)型數(shù)據(jù)的最大長(zhǎng)度
minLength字符串類(lèi)型數(shù)據(jù)的最小長(zhǎng)度
pattern使用正則表達(dá)式約束字符串類(lèi)型數(shù)據(jù)

JSON Schema關(guān)鍵字詳解

JsonSchema代碼:

{

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

    "title": "TestInfo",

    "description": "some information about test",

    "type": "object",

    "properties": {

        "name": {

            "description": "Name of the test",

            "type": "string"

        },

        "age": {

            "description": "age of test",

            "type": "integer"

        }

    },

    "required": [

        "name"

    ]

}

詳細(xì)解釋?zhuān)?/p>

  • $schema:用于指定JSONSchema的版本信息,該值由官方提供,不可亂寫(xiě)。該關(guān)鍵字可以省略。

  • title:當(dāng)前schema的標(biāo)題信息??梢允÷?/p>

  • description:當(dāng)前節(jié)點(diǎn)的描述

  • type:當(dāng)前節(jié)點(diǎn)的類(lèi)型,最外層type代表json的最外層是什么樣的類(lèi)型。例如上方的例子中,符合該JsonSchema的json數(shù)據(jù)必需是一個(gè)JsonObject而不能是一個(gè)JsonArray

  • properties:代表當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)信息。例如上方的例子中,符合該JsonSchema的json數(shù)據(jù)的信息可以存在“name”節(jié)點(diǎn)和“age”節(jié)點(diǎn)。按照上面的配置required信息來(lái)看,name是必需要有的,而age是非必需的。

  • required: 是一個(gè)數(shù)組類(lèi)型,代表當(dāng)前節(jié)點(diǎn)下必需的節(jié)點(diǎn)key。例如上方例子中,規(guī)定了json的格式必需要有name節(jié)點(diǎn)。

符合上述JsonSchema的json數(shù)據(jù)如下:

第一種(不含有age節(jié)點(diǎn),只含有name一個(gè)節(jié)點(diǎn)或者name及其若干個(gè)節(jié)點(diǎn)):

{  "name": "shaofeer"}

第二種(含有age節(jié)點(diǎn),age節(jié)點(diǎn)的值必需為integer類(lèi)型):

{  "name": "shaofeer",  "age": 123,  "create_time": "2019-12-12"}

type的常用取值

type取值對(duì)應(yīng)的python數(shù)據(jù)類(lèi)型
objectObject
arrayList
integerint
numberfloat或int
nullNone
booleanBoolean
stringString

關(guān)鍵字詳解

最外層type為object時(shí)

  • properties

該關(guān)鍵字的值是一個(gè)對(duì)象。

用于指定JSON對(duì)象中的各種不同key應(yīng)該滿(mǎn)足的校驗(yàn)邏輯,如果待校驗(yàn)JSON對(duì)象中所有值都能夠通過(guò)該關(guān)鍵字值中定義的對(duì)應(yīng)key的校驗(yàn)邏輯, 每個(gè)key對(duì)應(yīng)的值,都是一個(gè)JSON Schema,則待校驗(yàn)JSON對(duì)象通過(guò)校驗(yàn)。 從這里,我們可以看到,只要待校驗(yàn)JSON對(duì)象的所有key分別都通過(guò)對(duì)應(yīng)的JSON Schema的校驗(yàn)檢測(cè),這個(gè)對(duì)象才算是通過(guò)校驗(yàn)。

"properties": {

    "name": {

      "description": "姓名必須由2-3個(gè)字組成",

      "type": "string",

      "maxLength": 3, 

     "minLength": 2

    },

    "age": {

      "description": "年齡必須大于18歲。并且不能超過(guò)60歲",

      "type": "integer",

      "minimum": 18,

      "maximum": 60

    }

  }

解釋?zhuān)?*每個(gè)key對(duì)應(yīng)的值,都是一個(gè)JSON Schema:**例如上方例子中,每一個(gè)key(name/age)對(duì)應(yīng)的值都是一個(gè)JSONSchema,JSONSchema中的關(guān)鍵字及描述都可以使用。

  • required

該關(guān)鍵字的值是一個(gè)數(shù)組,而數(shù)組中的元素必須是字符串,而且必須是唯一的。

該關(guān)鍵字限制了JSON對(duì)象中必須包含哪些一級(jí)key。 如果一個(gè)JSON對(duì)象中含有required關(guān)鍵字所指定的所有一級(jí)key,則該JSON對(duì)象能夠通過(guò)校驗(yàn)。

"required": ["id","name","price"]
  • minProperties、maxProperties

這兩個(gè)關(guān)鍵字的值都是非負(fù)整數(shù)。規(guī)定最多節(jié)點(diǎn)個(gè)數(shù)與最少節(jié)點(diǎn)個(gè)數(shù)。

指定了待校驗(yàn)JSON對(duì)象中一級(jí)key的個(gè)數(shù)限制,minProperties指定了待校驗(yàn)JSON對(duì)象可以接受的最少一級(jí)key的個(gè)數(shù),而maxProperties指定了待校驗(yàn)JSON對(duì)象可以接受的最多一級(jí)key的個(gè)數(shù)。

另外,需要注意的是,省略minProperties關(guān)鍵字和該關(guān)鍵字的值為0,具有相同效果。而,如果省略maxProperties關(guān)鍵字則表示對(duì)一級(jí)key的最大個(gè)數(shù)沒(méi)有限制。例如,如果限制一個(gè)JSON對(duì)象的一級(jí)key的最大個(gè)數(shù)為5,最小個(gè)數(shù)為1,則JSON Schema如下:

"minProperties": 1,"maxProperties": 5
  • patternProperties

該關(guān)鍵字的值是一個(gè)對(duì)象,該JSON對(duì)象的每一個(gè)一級(jí)key都是一個(gè)正則表達(dá)式,value都是一個(gè)JSON Schema。 指定符合正則表達(dá)式的key的規(guī)則。 只有待校驗(yàn)JSON對(duì)象中的一級(jí)key,通過(guò)與之匹配的patternProperties中的一級(jí)正則表達(dá)式, 對(duì)應(yīng)的JSON Schema的校驗(yàn),才算通過(guò)校驗(yàn)。例如,如果patternProperties對(duì)應(yīng)的值如下

"patternProperties": {

        "^a": {

            "type": "number"

        },

        "^b": {

            "type": "string"

        }

}

上面的JSON Schema表示,待校驗(yàn)JSON對(duì)象中,所有以a開(kāi)頭的一級(jí)key的value都必須是number,所有以b開(kāi)頭的一級(jí)key的value都必須是string。

  • additionalProperties

該關(guān)鍵字的值是一個(gè)JSON Schema。

如果待校驗(yàn)JSON對(duì)象中存在,既沒(méi)有在properties中被定義,又沒(méi)有在patternProperties中被定義,那么這些一級(jí)key必須通過(guò)additionalProperties的校驗(yàn)。

最外層type為array時(shí)

  • items:

該關(guān)鍵字的值是一個(gè)有效的JSON Schema或者一組有效的JSON Schema。

當(dāng)該關(guān)鍵字的值是一個(gè)有效的JSON Schema時(shí),只有待校驗(yàn)JSON數(shù)組中的所有元素均通過(guò)校驗(yàn),整個(gè)數(shù)組才算通過(guò)校驗(yàn)。例如,如果items關(guān)鍵字的具體定義如下:

{

    "type": "array",

    "items": {

        "type": "string",

        "minLength": 5

    }

}

上面的JSON Schema的意思是,待校驗(yàn)JSON數(shù)組的元素都是string類(lèi)型,且最小可接受長(zhǎng)度是5。那么下面這個(gè)JSON數(shù)組明顯是符合要求的,具體內(nèi)容如下:

["myhome", "green"]

那么下面這個(gè)JSON數(shù)據(jù)則是不符合要求,因?yàn)榈谝粋€(gè)元素的長(zhǎng)度小于5,具體內(nèi)容如下:

["home", "green"]

以上對(duì)于items的介紹是對(duì)于所有元素來(lái)規(guī)定的。

注意 下面對(duì)items的詳解,趨向于每一個(gè)元素的規(guī)則。

這里需要注意的是,如果items定義的有效的JSON Schema的數(shù)量和待校驗(yàn)JSON數(shù)組中元素的數(shù)量不一致,那么就要采用**“取小原則”**。即,如果items定義了3個(gè)JSON Schema,但是待校驗(yàn)JSON數(shù)組只有2個(gè)元素,這時(shí),只要待校驗(yàn)JSON數(shù)組的前兩個(gè)元素能夠分別通過(guò)items中的前兩個(gè)JSON Schema的校驗(yàn),那么,我們認(rèn)為待校驗(yàn)JSON數(shù)組通過(guò)了校驗(yàn)。而,如果待校驗(yàn)JSON數(shù)組有4個(gè)元素,這時(shí),只要待校驗(yàn)JSON數(shù)組的前三個(gè)元素能夠通過(guò)items中對(duì)應(yīng)的JSON Schema的校驗(yàn),我們就認(rèn)為待校驗(yàn)JSON數(shù)組通過(guò)了校驗(yàn)。

例如,如果items的值如下:

{

    "type": "array",

    "items": [

        {

            "type": "string",

            "minLength": 5

        },

        {

            "type": "number",

            "minimum": 10

        },

        {

            "type": "string"

        }

    ]

}

上面的JSON Schema指出了待校驗(yàn)JSON數(shù)組應(yīng)該滿(mǎn)足的條件,數(shù)組的第一個(gè)元素是string類(lèi)型,且最小可接受長(zhǎng)度為5,數(shù)組的第二個(gè)元素是number類(lèi)型,最小可接受的值為10,數(shù)組的第三個(gè)元素是string類(lèi)型。那么下面這兩個(gè)JSON數(shù)組明顯是符合要求的,具體內(nèi)容如下:

["green", 10, "good"]["helloworld", 11]

下面這兩個(gè)JSON數(shù)組卻是不符合要求的,具體內(nèi)容如下:

["green", 9, "good"]["good", 12]
  • additionalItems

該關(guān)鍵字的值是一個(gè)有效的JSON Schema。主要規(guī)定除了items內(nèi)部規(guī)定的元素之外的元素規(guī)則。只有在items是一個(gè)schema數(shù)組的時(shí)候才可以使用。

需要注意的是,該關(guān)鍵字只有在items關(guān)鍵字的值為一組有效的JSON Schema的時(shí)候,才可以使用,用于規(guī)定超出items中JSON Schema總數(shù)量之外的待校驗(yàn)JSON數(shù)組中的剩余的元素應(yīng)該滿(mǎn)足的校驗(yàn)邏輯。當(dāng)然了,只有這些剩余的所有元素都滿(mǎn)足additionalItems的要求時(shí),待校驗(yàn)JSON數(shù)組才算通過(guò)校驗(yàn)。

其實(shí),你可以這么理解,當(dāng)items的值為一組有效的JOSN Schema的時(shí)候,一般可以和additionalItems關(guān)鍵字組合使用,items用于規(guī)定對(duì)應(yīng)位置上應(yīng)該滿(mǎn)足的校驗(yàn)邏輯,而additionalItems用于規(guī)定超出items校驗(yàn)范圍的所有剩余元素應(yīng)該滿(mǎn)足的條件。如果二者同時(shí)存在,那么只有待校驗(yàn)JSON數(shù)組同時(shí)通過(guò)二者的校驗(yàn),才算真正地通過(guò)校驗(yàn)。

另外,需要注意的是,如果items只是一個(gè)有效的JSON Schema,那么就不能使用additionalItems,原因也很簡(jiǎn)單,因?yàn)閕tems為一個(gè)有效的JSON Schema的時(shí)候,其規(guī)定了待校驗(yàn)JSON數(shù)組所有元素應(yīng)該滿(mǎn)足的校驗(yàn)邏輯。additionalItems已經(jīng)沒(méi)有用武之地了。

如果一個(gè)additionalItems的值如下:

{

    "type": "array",

    "items": [

        {

            "type": "string",

            "minLength": 5

        },

        {

            "type": "number",

            "minimum": 10

        }

    ],

    "additionalItems": {

        "type": "string",

        "minLength": 2

    }

}

上面的JSON Schema的意思是,待校驗(yàn)JSON數(shù)組第一個(gè)元素是string類(lèi)型,且可接受的最短長(zhǎng)度為5個(gè)字符,第二個(gè)元素是number類(lèi)型,且可接受的最小值為10,剩余的其他元素是string類(lèi)型,且可接受的最短長(zhǎng)度為2。那么,下面三個(gè)JSON數(shù)組是能夠通過(guò)校驗(yàn)的,具體內(nèi)容如下:

["green", 10, "good"]["green", 11]["green", 10, "good", "ok"]

下面JSON數(shù)組是無(wú)法通過(guò)校驗(yàn)的,具體內(nèi)容如下:

["green", 10, "a"]["green", 10, "ok", 2]
  • minItems、maxItems

這兩個(gè)關(guān)鍵字的值都是非負(fù)整數(shù)。 指定了待校驗(yàn)JSON數(shù)組中元素的個(gè)數(shù)限制,minItems指定了待校驗(yàn)JSON數(shù)組可以接受的最少元素個(gè)數(shù),而maxItems指定了待校驗(yàn)JSON數(shù)組可以接受的最多元素個(gè)數(shù)。

另外,需要注意的是,省略minItems關(guān)鍵字和該關(guān)鍵字的值為0,具有相同效果。而,如果省略maxItems關(guān)鍵字則表示對(duì)元素的最大個(gè)數(shù)沒(méi)有限制。

例如,如果限制一個(gè)JSON數(shù)組的元素的最大個(gè)數(shù)為5,最小個(gè)數(shù)為1,則JSON Schema如下:

"minItems": 1,"maxItems": 5
  • uniqueItems

該關(guān)鍵字的值是一個(gè)布爾值,即boolean(true、false)。

當(dāng)該關(guān)鍵字的值為true時(shí),只有待校驗(yàn)JSON數(shù)組中的所有元素都具有唯一性時(shí),才能通過(guò)校驗(yàn)。當(dāng)該關(guān)鍵字的值為false時(shí),任何待校驗(yàn)JSON數(shù)組都能通過(guò)校驗(yàn)。 另外,需要注意的是,省略該關(guān)鍵字和該關(guān)鍵字的值為false時(shí),具有相同的效果。例如:

"uniqueItems": true

當(dāng)type的值為integer或者number時(shí)

integer和number的區(qū)別,integer相當(dāng)于python中的int類(lèi)型,而number相當(dāng)于python中的int或float類(lèi)型

  • multipleOf

該關(guān)鍵字的值是一個(gè)大于0的number,即可以是大于0的int,也可以是大于0的float。只有待校驗(yàn)的值能夠被該關(guān)鍵字的值整除,才算通過(guò)校驗(yàn)。

如果含有該關(guān)鍵字的JSON Schema如下:

{

    "type": "integer",

    "multipleOf": 2

}

那么,2、4、6都是可以通過(guò)校驗(yàn)的,但是,3、5、7都是無(wú)法通過(guò)校驗(yàn)的,當(dāng)然了,2.0、4.0也是無(wú)法通過(guò)校驗(yàn)的,但是,并不是因?yàn)閙ultipleOf關(guān)鍵字,而是因?yàn)閠ype關(guān)鍵字。

如果含有multipleOf關(guān)鍵字的JSON Schema如下:

{

    "type": "number",

    "multipleOf": 2

}

那么,2、2.0、4、4.0都是可以通過(guò)校驗(yàn)的,但是,3、3.0、3、3.0都是無(wú)法通過(guò)校驗(yàn)的。

  • maximum 、exclusiveMaximum

maximum該關(guān)鍵字的值是一個(gè)number,即可以是int,也可以是float。該關(guān)鍵字規(guī)定了待校驗(yàn)元素可以通過(guò)校驗(yàn)的最大值。即傳入的值必須小于maximum。 exclusiveMaximum該關(guān)鍵字和maximum一樣,規(guī)定了待校驗(yàn)元素可以通過(guò)校驗(yàn)的最大值,不同的是待校驗(yàn)元素可以等于exclusiveMaximum指定的值。即比maximum多了一個(gè)他自身這個(gè)邊界值.

{

    "type": "number",#  設(shè)定 maximum 為12.3 則傳入值必須小于12.3#

    "maximum": 12.3,#  設(shè)定 exclusiveMaximum為12.3 則傳入值是小于等于12.3

    "exclusiveMaximum": 12.3

}

  • minimum、exclusiveMinimum

minimum、exclusiveMinimum關(guān)鍵字的用法和含義與maximumexclusiveMaximum相似。唯一的區(qū)別在于,一個(gè)約束了待校驗(yàn)元素的最小值,一個(gè)約束了待校驗(yàn)元素的最大值。

當(dāng)type取值為string時(shí)

  • maxLength

該關(guān)鍵字的值是一個(gè)非負(fù)整數(shù)。該關(guān)鍵字規(guī)定了待校驗(yàn)JSON元素可以通過(guò)校驗(yàn)的最大長(zhǎng)度,即待校驗(yàn)JSON元素的最大長(zhǎng)度必須小于或者等于該關(guān)鍵字的值。

  • minLength

該關(guān)鍵字的值是一個(gè)非負(fù)整數(shù)。該關(guān)鍵字規(guī)定了待校驗(yàn)JSON元素可以通過(guò)校驗(yàn)的最小長(zhǎng)度,即待校驗(yàn)JSON元素的最小長(zhǎng)度必須大于或者等于該關(guān)鍵字的值。

  • pattern

該關(guān)鍵字的值是一個(gè)正則表達(dá)式。只有待校驗(yàn)JSON元素符合該關(guān)鍵字指定的正則表達(dá)式,才算通過(guò)校驗(yàn)。

  • format

該關(guān)鍵字的值可以是以下取值:datedate-time(時(shí)間格式)、email(郵件格式)、hostname(網(wǎng)站地址格式)、ipv4ipv6、uri等等。

{

    "type": "string",

    "format": "email"

}

使用format關(guān)鍵字時(shí),在實(shí)例化validator時(shí)必須給它傳format_checker參數(shù),fromat_checker參數(shù)的值即使各種版本的JSON模式規(guī)范的驗(yàn)證器類(lèi),如:

Draft7Validator Draft6Validator Draft4Validator

當(dāng)你實(shí)例化validator時(shí),如果沒(méi)有給它傳format_checker參數(shù), jsonschema是不會(huì)自動(dòng)校驗(yàn)schema中的format關(guān)鍵字的.因此,你需要做以下步驟: 1.額外導(dǎo)入JSON Schema某個(gè)版本的模式規(guī)范如:from jsonschema import draft7_format_checker 2.實(shí)例化validator時(shí)傳入:validate(instance=json_data, schema=my_schema, format_checker=draft7_format_checker)

全類(lèi)型可用

  • enum

該關(guān)鍵字的值是一個(gè)數(shù)組,該數(shù)組至少要有一個(gè)元素,且數(shù)組內(nèi)的每一個(gè)元素都是唯一的。 如果待校驗(yàn)的JSON元素和數(shù)組中的某一個(gè)元素相同,則通過(guò)校驗(yàn)。否則,無(wú)法通過(guò)校驗(yàn)。

**注意:**該數(shù)組中的元素值可以是任何值,包括null。省略該關(guān)鍵字則表示無(wú)須對(duì)待校驗(yàn)元素進(jìn)行該項(xiàng)校驗(yàn)。例如:

{

    "type": "number",

    "enum": [

        2,

        3,

        null,

        "hello"

    ]

}

  • const

該關(guān)鍵字的值可以是任何值,包括null。如果待校驗(yàn)的JSON元素的值和該關(guān)鍵字指定的值相同,則通過(guò)校驗(yàn)。否則,無(wú)法通過(guò)校驗(yàn)。

  • allOf

該關(guān)鍵字的值是一個(gè)非空數(shù)組,數(shù)組里面的每個(gè)元素都必須是一個(gè)有效的JSON Schema。 只有待校驗(yàn)JSON元素通過(guò)數(shù)組中所有的JSON Schema校驗(yàn),才算真正通過(guò)校驗(yàn)。

  • anyOf

該關(guān)鍵字的值是一個(gè)非空數(shù)組,數(shù)組里面的每個(gè)元素都必須是一個(gè)有效的JSON Schema。 如果待校驗(yàn)JSON元素能夠通過(guò)數(shù)組中的任何一個(gè)~~~~JSON Schema校驗(yàn),就算通過(guò)校驗(yàn)。

  • oneOf

該關(guān)鍵字的值是一個(gè)非空數(shù)組,數(shù)組里面的每個(gè)元素都必須是一個(gè)有效的JSON Schema。 如果待校驗(yàn)JSON元素能且只能通過(guò)數(shù)組中的某一個(gè)JSON Schema校驗(yàn),才算真正通過(guò)校驗(yàn)。不能通過(guò)任何一個(gè)校驗(yàn)和能通過(guò)兩個(gè)及以上的校驗(yàn),都不算真正通過(guò)校驗(yàn)。

  • not

該關(guān)鍵字的值是一個(gè)JSON Schema。只有待校驗(yàn)JSON元素不能通過(guò)該關(guān)鍵字指定的JSON Schema校驗(yàn)的時(shí)候,待校驗(yàn)元素才算通過(guò)校驗(yàn)。

  • default

該關(guān)鍵字的值是沒(méi)有任何要求的。該關(guān)鍵字常常用來(lái)指定待校驗(yàn)JSON元素的默認(rèn)值,當(dāng)然,這個(gè)默認(rèn)值最好是符合要求的,即能夠通過(guò)相應(yīng)的JSON Schema的校驗(yàn)。 另外,需要注意的是,該關(guān)鍵字除了提示作用外,并不會(huì)產(chǎn)生任何實(shí)質(zhì)性的影響。

type關(guān)鍵字

需要特別注意的是,type關(guān)鍵字的值可以是一個(gè)string,也可以是一個(gè)數(shù)組。 如果type的值是一個(gè)string,則其值只能是以下幾種:null、boolean、object、array、number、string、integer。 如果type的值是一個(gè)數(shù)組,則數(shù)組中的元素都必須是string,且其取值依舊被限定為以上幾種。只要帶校驗(yàn)JSON元素是其中的一種,則通過(guò)校驗(yàn)。

**注意,**以上JSON Schema只是為了展示部分關(guān)鍵字的用法,可能和實(shí)際應(yīng)用略有不同。

dependencies關(guān)鍵字

依賴(lài)關(guān)系

{  "$schema": "http://json-schema.org/draft-07/schema#",    "properties": {  },  "dependencies": {    "age": [      "name"    ]  }, }

上述schema表示,age依賴(lài)于name,如果age出現(xiàn),name必須出現(xiàn)

$ref關(guān)鍵字

使用該關(guān)鍵字可以引用一個(gè)規(guī)范

"warehouseLocation": {

     "description": "Coordinates of the warehouse where the product is located.", 

     "$ref": "https://example.com/geographical-location.schema.json"

}

if-then-else 關(guān)鍵字

{

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

    "type": "object",

    "properties": {

        "foo": {

            "type": "string"

        },

        "bar": {

            "type": "string"

        }

    },

    "if": {

        "properties": {

            "foo": {

                "enum": [

                    "bar",

                    "123"

                ]

            }

        },

        "required": [

            "foo"

        ]

    },

    "then": {

        "required": [

            "bar"

        ]

    },

    "else": {

        "required": [

            "cc"

        ]

    }

}

符合上述規(guī)則的json(最簡(jiǎn)單的兩種方式):

{  "foo": "bar22",  "cc": 123}{  "foo": "bar",  "bar": "123"}

概述:

if條件為:key為foo的值是bar或者123 返回true,否則返回falseif返回true執(zhí)行then    then的規(guī)則,bar必須存在if返回false執(zhí)行else    else規(guī)則,cc必須存在

官方的參考文檔如下: json-schema.org/latest/json… json-schema.org/implementat…

本文參考:www.cnblogs.com/ChangAn223/…

1、生成JSON格式可讀文檔

使用過(guò)typescript都應(yīng)該了解靜態(tài)類(lèi)型的好處,代碼包含了類(lèi)型接口聲明,相當(dāng)于文檔注釋?zhuān)勾a一目了然,提高了可讀性。我們可以基于現(xiàn)有的JSON來(lái)生成JSON Schema,快速生成JSON格式規(guī)范,相當(dāng)于一份可讀文檔,減少了團(tuán)隊(duì)之間的溝通理解成本。

通過(guò)JSON轉(zhuǎn)換JSON Schema在線工具:
www.jsonschema.net/

2、提供更為準(zhǔn)確可靠的mock數(shù)據(jù)

基于JSON Schema提供多種校驗(yàn)約束條件,可以使用它原生的能力來(lái)生成更為準(zhǔn)確可靠的mock數(shù)據(jù)

使用JSON Schema生成mock數(shù)據(jù)在線工具:
json-schema-faker.js.org/

3、數(shù)據(jù)校驗(yàn)

基于JSON Schema提供多種校驗(yàn)約束條件,可以定義數(shù)據(jù)的校驗(yàn)規(guī)則,通過(guò)JSON Schema進(jìn)行數(shù)據(jù)校驗(yàn),多用于接口請(qǐng)求參數(shù)校驗(yàn),表單校驗(yàn),和數(shù)據(jù)校驗(yàn)自動(dòng)化測(cè)試上

JSON Schema校驗(yàn)工具:Ajv?


該文章在 2025/1/15 11:41:19 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved