我想使用JSON模式驗證某些值。我有兩個對象,稱之爲trackedItems和trackedItemGroups。 trackedItemGroups是一個組名和一個trackedItems名稱列表。例如,模式類似於:限制JSON值與其它JSON的名字對象
"TrackedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"TrackedItemName": { "type": "string" },
"Properties": { ---- }
}
}
},
"TrackedItemGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"GroupName": {
"type": "string"
},
"TrackedItems": {
"type": "array",
"items": {"type": "string"}
}
}
}
}
我想驗證在TrackedItemGroups
的TrackedItems
陣列的每個字符串是在TrackedItems.TrackedItemName
已定義的名稱。
這會是這樣的使用enum
屬性限制值,但enum
列表是基於TrackedITems.TrackedItemName
的值生成。
我如何寫才能使用JSON自己的數據進行驗證的架構?
我知道我可以移動的東西,即TrackedItems定義他們在的組,但有數百個跟蹤項目,這個組織對我的用例效果更好。
我已經試過這樣:
"TrackedItems": {
"type": "array",
"items": {
"oneOf": [
{"$ref":"#/properties/TrackedItems/items/properties/TrackedItemName"}
]
}
}
但是,這將導致一個錯誤:
Newtonsoft.Json.Schema.JSchemaReaderException: Could not resolve schema reference '#/properties/TrackedItems/items/properties/TrackedItemName'.
對於數據舉例來說,如果我有TrackedItems:
項目1,項目2, ItemA,ItemB,ItemC
And groups:
組別1: 項目1,ItemB,ItemC
組2: 項目1,項目2,ItemZ
,因爲它包含在TrackedItems沒有定義一個項目組2將拋出一個違規。
謝謝,經過更多的研究,我發現模式不會與此工作。相反,我創建了一個單元測試來在代碼中執行此驗證。感謝您的回答。 – MichaelHouse