jsonschema是描述你的JSON數據格式;JSON模式(應用程式/模式+ JSON)有多種用途,其中之一就是實例驗證。驗證過程可以是互動式或非互動式的。例如,應用程式可以使用JSON模式來構建用戶界面使互動的內容生成除了用戶輸入檢查或驗證各種來源獲取的數據。
基本介紹
- 中文名:jsonschema
- 含義:描述你的JSON數據格式
- 多種用途:實例驗證
- 關鍵字:“必須”、“不得
使用與介紹,引言與副本,
使用與介紹
一般使用JsonSchema來進行json數據格式驗證,在數據提交到業務層次之前進行json格式的驗證。
jsonschema(應用程式/模式+ JSON)有多種用途,其中之一就是實例驗證。驗證過程可以是互動式或非互動式的。例如,應用程式可以使用JSON模式來構建用戶界面使互動的內容生成除了用戶輸入檢查或驗證各種來源獲取的數據。JSON Schema Validation描述了專用於驗證目的的模式的關鍵字。
JSON模式(應用程式/模式+ JSON)有多種用途,其中之一就是實例驗證。驗證過程可以是互動式或非互動式的。例如,應用程式可以使用JSON模式來構建用戶界面使互動的內容生成除了用戶輸入檢查或驗證各種來源獲取的數據。本規範描述了專用於驗證目的的模式的關鍵字。
JSON模式:互動式和非互動式驗證
JSON架構驗證
JSON模式:互動式和非互動式驗證
JSON架構驗證
引言與副本
JSON模式可用於需要一個給定的JSON文檔(一個實例)滿足若干條件。這些條件是通過在本說明書中描述的一組關鍵字的物化。此外,一組關鍵字的定義,以幫助在互動實例生成。這些都在本說明書中也有描述。
這個規範將使用由JSON模式的核心規範中定義的術語。據表示,讀者對本規範的副本。
2,約定和術語
關鍵字“必須”,“不得”,“要求”,“應當”,“不得”,“應該”,“不應該”,“建議”,“或許”,“可選”本文檔中如中解釋RFC 2119[RFC2119]。
本規範使用術語“容器實例”來指代這兩個數組和對象實例。它使用的術語是“孩子的實例”來指代數組元素或對象的成員值。
本規範使用“屬性設定”一詞來指代一組對象的成員姓名;例如,屬性集的JSON對象{“A”:1,“B”:2}為[“A”,“B”。
在數組的值的元素被認為是獨特的,如果該數組的任何兩個元素是相等的,由核心規範定義。
3,互操作性方面的考慮
3.1。字元串實例驗證
應該指出的是空字元(\ X00)是一個JSON字元串有效。一個實例,以驗證可包含一個字元串值,以該字元,而不管底層程式語言來處理這樣的數據的能力。
3.2。數值實例驗證
JSON的規範沒有定義任何邊界的標度或精度數值。JSON模式並沒有任何定義任何這樣的界限。這意味著,通過JSON模式處理的數字實例可以是任意大的和/或有任意大的小數部分,而不管底層程式語言來處理這樣的數據的能力。
3.3。正則表達式
兩個驗證的關鍵字,“模式”和“patternProperties”,使用正則表達式來表示的約束。這些正則表達式應根據有效的ECMA 262[ECMA262]正則表達式的方言。
此外,由於高差距正則表達式構造的支持,架構作者應該把自己限制於以下的正則表達式標記:
個人Unicode字元,如由定義的JSON規範[RFC4627];
簡單的字元類([ABC]),範圍內的字元類([AZ]);
可補字元類([^ ABC],[^ AZ]);
簡單量詞:“+”(一種或多種),“*”(零個或多個),“?”(零個或一個),和他們的懶惰版本(“+?”,“*?”,“ - ”);
範圍量詞:“{X}”(恰好等於x的出現),“{X,Y}”(至少為x,頂多Y,事件),{X,}(X事件或以上),其慵懶的版本;
開頭-的輸入(“^”),結束輸入的和(“$”)錨定器;
簡單的分組(“(...)”),並交替(“|”)。
最後,實現必須不考慮正則表達式錨,無論在開始時也沒有底。這意味著,例如,在“ES”匹配“表達”。
4,一般驗證方面的考慮
4.1。關鍵字和實例的基本類型
一些驗證的關鍵字只適用於一個或多個基本類型。當原始類型實例不能由某個特定關鍵字進行驗證,驗證此關鍵字和實例應該會成功。
本說明書中基團中的關鍵字不同的部分,根據該原語類型或類型,這些關鍵字進行驗證。需要注意的是一些關鍵字驗證所有實例類型。
4.2。相互依存的關鍵字
為了驗證一個實例,一些關鍵字由其他關鍵字的存在(或不存在)的影響。在這種情況下,所有這些關鍵字將被分組在相同的部分。
4.3。缺少關鍵字的預設值
一些關鍵字,如果不存在,可以通過實現視為具有默認值。在這種情況下,預設值將被提及。
4.4。容器實例的驗證
關鍵字的可能性,以驗證容器實例(數組或對象)只驗證實例本身,而不是自己的孩子(陣列項目或對象的屬性)。其中一些關鍵字做,不過,包含這是必要的,用以計算模式(S)孩子必須是有效的對抗信息。該算法計運算元實例的相關模式(S)在一個單獨的部分進行說明。
應當指出的是,雖然一個數組元素只需要驗證對一個模式,對象構件的值可能需要驗證對多個模式。
5,驗證關鍵字排序方法實例類型
5.1。驗證關鍵字數字實例(數字和整數)
5.1.1。multipleOf
5.1.1.1。有效值
“multipleOf”的值必須是一個JSON數。這個數字必須嚴格大於0。
5.1.1.2。條件驗證成功
一個數字實例有效打擊“multipleOf”如果實例通過該關鍵字的值相除的結果是一個整數。
5.1.2。最大和exclusiveMaximum
5.1.2.1。有效值
“最大值”的值必須是一個JSON數。“exclusiveMaximum”的值必須是一個布爾值。
如果“exclusiveMaximum”存在,“最大值”,也必須存在。
5.1.2.2。條件驗證成功
驗證成功取決於“exclusiveMaximum”的存在和值:
如果“exclusiveMaximum”不存在,或具有布爾值假,則該實例是有效的,如果它是低於或等於“最大值”的值;
如果“exclusiveMaximum”具有布爾值true,則該實例是有效的,如果它比“最大”的價值絕對低。
5.1.2.3。默認值
“exclusiveMaximum”,如果不存在,可以被認為是目前與布爾值false。
5.1.3。最小和exclusiveMinimum
5.1.3.1。有效值
“最低”的值必須是一個JSON數。“exclusiveMinimum”的值必須是一個布爾值。
如果“exclusiveMinimum”存在,“最低”,還必須存在。
5.1.3.2。條件驗證成功
驗證成功取決於“exclusiveMinimum”的存在和值:
如果“exclusiveMinimum”不存在,或具有布爾值假,則該實例是有效的,如果它大於或等於“最小值”的值;
如果“exclusiveMinimum”存在,並且具有布爾值true,則該實例是有效的,如果它是嚴格比“最低”的價值更大。
5.1.3.3。默認值
“exclusiveMinimum”,如果不存在,可以被認為是目前與布爾值false。
5.2。驗證關鍵字串
5.2.1。最大長度
5.2.1.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.2.1.2。條件驗證成功
String實例是有效的對抗這個關鍵字,如果其長度小於或等於該關鍵字的值。
一個字元串實例的長度定義為它的字元數所定義的RFC 4627[RFC4627]。
5.2.2。MINLENGTH
5.2.2.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.2.2.2。條件驗證成功
String實例是有效的對抗這個關鍵字,如果它的長度大於或等於該關鍵字的值。
一個字元串實例的長度定義為它的字元數所定義的RFC 4627[RFC4627]。
5.2.2.3。默認值
“MINLENGTH”,如果不存在,可被認為是本與整數值0。
5.2.3。圖案
5.2.3.1。有效值
該關鍵字的值必須是一個字元串。該字元串應該是一個有效的正則表達式,根據ECMA 262的正則表達式方言。
5.2.3.2。條件驗證成功
String實例被認為是有效的,如果正則表達式的成功實例相匹配。回想一下:正則表達式不能隱式固定。
5.3。驗證關鍵字數組
5.3.1。additionalItems和項目
5.3.1.1。有效值
“additionalItems”的值必須是一個布爾值或對象。如果它是一個對象,這個對象必須是有效的JSON模式。
的“項目”的值必須是一個對象或數組。如果它是一個對象,這個對象必須是有效的JSON模式。如果它是一個數組,該數組的項目必須是對象,每個對象必須是有效的JSON模式。
5.3.1.2。條件驗證成功
有關於這兩個關鍵字的數組實例驗證成功確定如下:
如果“項目”不存在,或者它的值是一個對象,該實例的驗證總是成功“additionalItems”的價值,不管;
如果“additionalItems”的值是布爾值true或一個對象,該實例的驗證總是成功;
如果“additionalItems”的值是布爾值false和“物品”的值是一個數組,該實例是有效的,如果它的大小小於或等於的“項目”的大小。
5.3.1.3。示例
下面的例子,其中包括“additionalItems”具有布爾值false和“項”是一個數組的情況下,因為這是下一個實例可能無法成功驗證的唯一情況。
這是一個例子的模式:
{ “項目”:[{},{},{}], “additionalItems”:假的}
有了這個架構,在下列情況下有效:
[](空數組)
[[1,2,3,4],[5,6,7,8],
[1,2,3];
在下列情況下是無效的:
[1,2,3,4],
[空,{“A”“B”},真實,31.000002020013]
5.3.1.4。默認值
如果任一關鍵字不存在,則可以認為存在一個空的架構。
5.3.2。maxItems
5.3.2.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.3.2.2。條件驗證成功
數組實例有效打擊“maxItems”如果它的大小小於或等於該關鍵字的值。
5.3.3。minItems
5.3.3.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.3.3.2。條件驗證成功
數組實例有效打擊“minItems”如果它的大小大於或等於該關鍵字的值。
5.3.3.3。默認值
如果該關鍵字不存在,可以認為目前為0的值。
5.3.4。uniqueItems
5.3.4.1。有效值
該關鍵字的值必須是一個布爾值。
5.3.4.2。條件驗證成功
如果該關鍵字的布爾值false,實例驗證成功。如果有布爾值true,則實例驗證成功,如果它的所有元素都是獨一無二的。
5.3.4.3。默認值
如果不存在,這個關鍵字可以被認為是目前與布爾值false。
5.4。驗證關鍵字對象
5.4.1。maxProperties
5.4.1.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.4.1.2。條件驗證成功
對象實例是有效的針對“maxProperties”如果屬性的其數量小於或等於該參數的值。
5.4.2。minProperties
5.4.2.1。有效值
該關鍵字的值必須是一個整數。此整數必須大於或等於0。
5.4.2.2。條件驗證成功
對象實例是有效的針對“minProperties”如果屬性的其數目大於或等於該參數的值。
5.4.2.3。默認值
如果該關鍵字不存在,可以認為目前為0的值。
5.4.3。要求
5.4.3.1。有效值
該關鍵字的值必須是一個數組。該數組必須至少有一個元素。該數組的元素必須是字元串,而且必須是唯一的。
5.4.3.2。條件驗證成功
對象實例是有效的對抗這個關鍵字,如果它的屬性集包含該關鍵字的值數組所有元素。
5.4.4。additionalProperties,性能和patternProperties
5.4.4.1。有效值
“additionalProperties”的值必須是一個布爾值或對象。如果它是一個對象,它也必須是有效的JSON模式。
“性”的值必須是一個對象。這個對象的每個值必須是一個對象,每個對象必須是有效的JSON模式。
“patternProperties”的值必須是一個對象。這個對象的每個屬性的名稱應該是一個有效的正則表達式,根據ECMA 262的正則表達式方言。這個對象的每個屬性值必須是一個對象,每個對象必須是有效的JSON模式。
5.4.4.2。條件驗證成功
針對這三個關鍵字的對象實例的驗證成功取決於“additionalProperties”的值:
如果它的值是布爾值true或模式,驗證成功;
如果它的值是邏輯假,則算法來確定驗證成功進行說明。
5.4.4.3。默認值
如果不是“屬性”或“patternProperties”是不存在,它們可以被認為是本與空對象的值。
如果“additionalProperties”不存在時,它可以被認為是本與空模式的值。
5.4.4.4。如果“additionalProperties”具有布爾值false
在這種情況下,該實例的驗證依賴於屬性集“屬性”和“patternProperties”的。在本節中,“patternProperties”的屬性名稱將被稱為正則表達式方便。
第一步驟是收集下列集合:
- Š
- 屬性設定的實例來驗證。
- p
- 該酒店距離“屬性”中設定。
- PP
- 該酒店距離“patternProperties”設定。
在收集這三組時,過程如下:
從“S”的所有元素“P”的,如果有刪除;
在“PP”每一個正則表達式,去掉“S”這個正則表達式匹配的所有元素。
該實例的驗證成功,如果,這兩個步驟之後,將“s”為空。
5.4.4.5。示例
該模式將被作為一個例子:
{ “屬性”:{ “P1”:{} }, “patternProperties”:{ “P”:{}, “[0-9]”:{} }}
這是實例來驗證:
{ “P1”:真實, “P2”:空, “A32&O”:“foobar的”, “”:[] “不甘示弱”:42, “蘋果”:“餡餅”}
這三個屬性設定為:
- Š
- [“P1”,“P2”,“A32&O”,“”,“搗鼓”,“蘋果”]
- p
- [“P1”]
- PP
- [“P”,“[0-9]”]
施加的兩步算法:
在第一步驟之後,“P1”,從“S”除去;
第二步驟中,“P2”(匹配的“p”)之後,“A32&o”的(匹配的“[0-9]”)和“蘋果”(匹配的“p”),從“S”中刪除。
本集“S”仍然包含兩個元素,“”和“擺弄”。因此,驗證失敗。
5.4.5。依賴關係
5.4.5.1。有效值
該關鍵字的值必須是一個對象。這個對象的每個值必須是一個對象或數組。
如果該值是一個對象,它必須是一個有效的JSON模式。這就是所謂的模式的依賴。
如果該值是一個數組,它必須有至少一個元素。每個元素必須是一個字元串,數組中的元素必須是唯一的。這就是所謂的屬性依賴。
5.4.5.2。條件驗證成功
5.4.5.2.1。架構的依賴
對於所有的(名稱,架構)雙模式的依賴,如果該實例的一個屬性這個名字,那么它也必須成功地驗證對模式。
請注意,這是該實例本身必須驗證成功,不與屬性名稱關聯的值。
5.4.5.2.2。房地產的依賴
對於每一個(名字,屬性集),對房地產的依賴,如果該實例的一個屬性這個名字,那么它也必須具有的屬性具有相同名稱的屬性集。
5.5。驗證關鍵字的任何實例類型
5.5.1。枚舉
5.5.1.1。有效值
該關鍵字的值必須是一個數組。該數組必須至少有一個元素。數組中的元素必須是唯一的。
數組中的元素可以是任何類型,包括空的。
5.5.1.2。條件驗證成功
一個實例成功地驗證對這個關鍵字的值是否等於該關鍵字的值數組中的元素之一。
5.5.2。類型
5.5.2.1。有效值
該關鍵字的值必須是一個字元串或數組。如果它是一個數組,該數組的元素必須是字元串,必須是唯一的。
字元串值必須是由核心規範定義的七個基本類型之一。
5.5.2.2。條件驗證成功
實例成功匹配,如果它的原語類型是由關鍵字定義的類型之一。回想一下:“數”包括“整數”。
5.5.3。allOf
5.5.3.1。有效值
該關鍵字的值必須是一個數組。該數組必須至少有一個元素。
數組的元素必須是對象。每個對象都必須是有效的JSON模式。
5.5.3.2。條件驗證成功
一個實例成功地驗證對這個關鍵字,如果它成功地驗證對這個關鍵字的值定義的所有模式。
5.5.4。anyOf
5.5.4.1。有效值
該關鍵字的值必須是一個數組。該數組必須至少有一個元素。
數組的元素必須是對象。每個對象都必須是有效的JSON模式。
5.5.4.2。條件驗證成功
一個實例成功地驗證對這個關鍵字,如果它成功地驗證對這個關鍵字的值來定義至少一個架構。
5.5.5。oneOf的
5.5.5.1。有效值
該關鍵字的值必須是一個數組。該數組必須至少有一個元素。
數組的元素必須是對象。每個對象都必須是有效的JSON模式。
5.5.5.2。條件驗證成功
一個實例成功地驗證對這個關鍵字,如果它成功地驗證對這個關鍵字的值定義只有一個模式。
5.5.6。不
5.5.6.1。有效值
該關鍵字的值必須是一個對象。這個對象必須是有效的JSON模式。
5.5.6.2。條件驗證成功
一個實例是有效的對抗這個關鍵字,如果它沒有成功地驗證對這個關鍵字定義的模式。
5.5.7。定義
5.5.7.1。有效值
該關鍵字的值必須是一個對象。這個對象的每個成員值必須是有效的JSON模式。
5.5.7.2。條件驗證成功
此關鍵字扮演本身的驗證沒有任何作用。它的作用是提供一個標準化的位置架構的作者內嵌的JSON架構成一個更普遍的模式。
作為一個例子,這裡是描述正整數,其中正整數約束是在“定義”一個子模式的陣列架構:
{ “類型”:“陣”, “項目”:{“$ REF”:“#/定義/ positiveInteger”}, “定義”:{ “positiveInteger”:{ “類型”:“整型”, “最小”:0, “exclusiveMinimum”:真 } }}
6,元數據關鍵字
6.1。“標題”和“說明”
6.1.1。有效值
這兩個關鍵字的值必須是一個字元串。
6.1.2。用途
這兩個關鍵字可以用於裝飾用關於由該用戶接口產生的數據信息的用戶界面。冠軍將preferrably很短,而說明將提供有關解釋這個模式描述的實例的目的。
這兩個關鍵字可以在根模式中使用,並且在任何subschemas。
6.2。“默認”
6.2.1。有效值
沒有任何限制放在這個關鍵字的值。
6.2.2。用途
這個關鍵字可以用來提供與特定的模式相關聯的默認的JSON值。建議將默認值是有效對抗相關的模式。
這個關鍵字可能在根模式中使用,並且在任何subschemas。
7,語義驗證了“格式化”
7.1。前言
結構驗證單獨可能不足以驗證實例滿足應用程式的所有要求。在“格式”關鍵字定義為允許語義互操作驗證這是由權威的資源,準確地描述值的一個固定的子集,是他們的RFC或其它外部規格。
該關鍵字的值稱為格式屬性。它必須是一個字元串。format屬性一般只能驗證一個給定的實例類型。如果實例驗證的類型是不是在這一套,驗證了這種格式的屬性和實例應該會成功。
7.2。實施要求
實現可以支持“格式”關鍵字。如果他們選擇這樣做:
他們應該實現驗證下面定義的屬性;
他們應該提供一個選項來禁用驗證此關鍵字。
實現可以添加自定義的格式屬性。除當事人之間的協定,架構作者概不期望的對等實施,以支持這個關鍵字和/或自定義格式的屬性。
7.3。定義的屬性
7.3.1。日期 - 時間
7.3.1.1。適用範圍
此屬性適用於字元串實例。
7.3.1.2。驗證
String實例是有效的對抗這個屬性,如果它是一個有效的日期表示所定義的RFC 3339,第5.6節[RFC3339]。
7.3.2。電子郵件
7.3.2.1。適用範圍
此屬性適用於字元串實例。
7.3.2.2。驗證
String實例是有效的對抗這個屬性,如果它是一個有效的網際網路電子郵件地址,所定義的RFC 5322,第3.4.1節[RFC5322]。
7.3.3。主機名
7.3.3.1。適用範圍
此屬性適用於字元串實例。
7.3.3.2。驗證
String實例是有效的對這種屬性,如果它是一個網際網路主機名中的合法代表,所定義的RFC 1034第3.1節[RFC1034]。
7.3.4。IPv4的
7.3.4.1。適用範圍
此屬性適用於字元串實例。
7.3.4.2。驗證
String實例是有效的對抗這個屬性,如果它是按照“點分”的ABNF語法IPv4地址的有效表示中定義的RFC 2673第3.2節[RFC2673]。
7.3.5。IPv6的
7.3.5.1。適用範圍
此屬性適用於字元串實例。
7.3.5.2。驗證
String實例是有效的對這種屬性,如果它是一個IPv6地址中定義的有效表示RFC 2373,第2.2節[RFC2373]。
7.3.6。URI
7.3.6.1。適用範圍
此屬性適用於字元串實例。
7.3.6.2。驗證
String實例是有效的對這種屬性,如果它是一個有效的URI,根據[RFC3986]。
8,參考算法計算兒童模式
8.1。前言
計算模式,或模式,一個孩子實例必須驗證對已受以下幾點:
容器實例類型;
子實例的定義在容器實例的特性;
關鍵字的價值隱含在計算中。
此外,重要的是,如果一個或多個關鍵字(S)暗示在計算中沒有定義,它們被認為是本其預設值,這將在本節中被調用。
8.2。數組元素
8.2.1。定義特徵
子實例的定義特徵是其在數組中的索引。回想一下:數組的下標從0開始。
8.2.2。隱含的關鍵字和默認值。
在這個計算中兩個隱含的關鍵字是“項目”和“additionalItems”。
如果任一關鍵字是不存在,它被認為是目前與空模式的值。此外,布爾值true的“additionalItems”被認為是等效於一個空的架構。
8.2.3。計算
8.2.3.1。如果“項目”是一個模式
如果項目是一個模式,那么孩子的實例必須是有效對抗這種模式,不管它的索引,也不管“additionalItems”的價值。
8.2.3.2。如果“項目”是一個數組
在這種情況下,該模式依賴於指數:
如果指數小於或等於的“項目”的大小,子實例必須是有效的對相應的模式,在“項目”陣;
否則,它必須是有效的反對“additionalItems”中定義的架構。
8.3。對象成員
8.3.1。定義特徵
的定義特徵是孩子的屬性名稱。
8.3.2。隱含的關鍵字
隱含在這個計算中的三個關鍵字是“屬性”,“patternProperties”和“additionalProperties”。
如果“屬性”或“patternProperties”不存在,它們被認為是目前用的空對象的值。
如果“additionalProperties”不存在時,它被認為是目前與空模式的值。此外,布爾值true被視為等同於一個空的架構。
8.3.3。計算
8.3.3.1。在這個計算中所用的名稱
下面的計算使用下列名稱:
- 米
- 孩子的屬性名稱。
- p
- 該酒店距離“屬性”中設定。
- PP
- 該酒店距離“patternProperties”設定。這集的元素將被稱為正則表達式方便。
- Š
- 本集架構為孩子實例。
8.3.3.2。第一步:在“屬性”模式
如果設定為“p”包含值“M”,則在“屬性”的對應的模式被添加到“S”。
8.3.3.3。第二步:在“patternProperties”模式
在“頁”每個正則表達式,如果“m”的成功匹配,在“patternProperties”相應的模式被添加到“S”。
8.3.3.4。第三步:“additionalProperties”
由“additionalProperties”中定義的模式將被添加到“S”若且唯若,在這個階段,“s”為空。
9 IANA考慮
本規範沒有與問候IANA的任何影響。
JsonSchema.net是一個從JSON數據自動生成JSON Schema的工具. 模式生成根據 IETF JSON Schema Internet Draft. 草案規範, 此工具包括5個主要功能:
接受JSON輸入,並根據此輸入生成秒速此JSON輸入的JSON Schema
Provides a GUI to modify the schema generated with useful additional information defined in the JSON Schema Internet Draft.
提供修改JSON Schema結構的UI界面
提供友好的編輯功能
JSON Scheme文本格式化,對應用程式更友好.
JSON Schema 線上編輯器,用jQuery實現。
接受JSON輸入,並根據此輸入生成秒速此JSON輸入的JSON Schema
Provides a GUI to modify the schema generated with useful additional information defined in the JSON Schema Internet Draft.
提供修改JSON Schema結構的UI界面
提供友好的編輯功能
JSON Scheme文本格式化,對應用程式更友好.
JSON Schema 線上編輯器,用jQuery實現。