我正在研究一個JSON模式,我在陣列驗證方面遇到了困難。我有這樣一個輸入JSON的例子
{<
"paths_1": {
"path_1": [>
{>
"abc"/span>: "valid_abc"
},
{>
"abc": "invalid_abc"
}
]
},
"paths_2": {
"path_2": [>
{
"ghi": "valid_ghi"
}
]
}
}
我對這個JSON資料的規則是,如果paths_2.path_2[].ghi是 "valid_ghi "和paths_1.path_1[].abc是 "valid_abc",那么要求有 "valid_abc "物件的 "def "鍵。
我為這個規則創建了這個JSON模式,但它并沒有像預期的那樣作業。
{
"$schema"/span>。"http://json-schema.org/draft-07/schema"。
"type": "object",
"屬性": {
"paths_1": {
"type": "object",
"屬性": {
" items": {
"屬性": {
"path_1": {
"屬性": {
"abc": {
"type": "string": "type".
},
"def": {
"type": "string": "type".
}
}
}
}
}
}
},
"paths_2": {
"type": "object",
"屬性": {
" items": {
"屬性": {
"path_2": {
"屬性": {
"ghi": {
"type": "string""allOf": [
{
"if": {
"allOf": [
{
"屬性": {
"paths_1": {
"屬性": {
"path_1": {
"包含": {
"屬性": {
"abc": {
"const": "valid_abc""required": [
"abc"/span>
]
}
}
}
}
}
},
{
"屬性": {
"paths_2"/span>: {
"屬性": {
"path_2": {
"包含": {
"屬性": {
"ghi": {
"const": "valid_ghi": "const".
}
},
"required": [
"ghi"/span>
]
}
}
}
}
}
}
]
},
"then": {
"屬性"/span>: {
"paths_1"/span>: {
"屬性": {
"path_1": {
" items": {
"required": [
"def": "def"
]
}
}
}
}
}
}
}
}
當我測驗這個模式時,它回傳 "def "是 "invalid_abc "物件的一個必要屬性,而它不應該是。
我試著將JSON模式中的contains鍵改為items,但是在這種情況下,如果部分變為false,驗證器就會回傳輸入是有效的。
有什么方法可以用給定的規則來驗證這個輸入嗎?
uj5u.com熱心網友回復:
你需要在items中再次檢查valid_abc。
你的then子句沒有背景關系,我想這就是你所期望的。
" items": {
"if": {
"屬性": {
"abc": {
"const": "valid_abc"
}
},
"required": []。
"abc"/span>
]
},
"then": {
"required": []。
"def"
]
}
}
演示。https://jsonschema.dev/s/M3cvJ
因此,你可以簡化你的條件檢查,因為你不需要用valid_abc來檢查陣列是否包含一個物件。你可以洗掉if/allOf[0],并解除allOf的包裝,因為它將只有一個子schema。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311812.html
標籤:
上一篇:如何在Swift中按下UITableView單元格內的按鈕來復制一個字串
下一篇:用C語言進行Unix網路編程
