0
我有一個json模式,我有3種類型的媒體,標題,圖像和頭像。如何從json模式中獲取值的類型引用
這些介質類型都有不同的結構,所以我使用$ref
和oneOf
來指定哪些是有效的選項。
但是,我無法弄清楚如何根據兄弟的值指定使用哪個引用。
我的模式是這樣的
const mediaSchema = {
"type": "object",
"required": ["mediaType", "content", "points"],
"properties":{
"mediaType": {"type":"string", "pattern": "^(image|avatar|caption)$"},
"content": {
"oneOf": [
{"$ref":"#/definitions/image"},
{"$ref": "#/definitions/caption"},
{"$ref": "#/definitions/avatar"}
],
}
},
"definitions": {
"caption":
{"type": "object",
"required": ["text"],
"properties": {
"text": {"type": "string"},
"fontSize": {"type": "string", "pattern": "^[0-9]{1,3}px$"}
}
},
"image": {"type": "string", "format": "url"},
"avatar":
{"type": "object",
"properties": {
"name": {"type": "string"},
"image": {"type": "string", "format":"url"}
}
}
}
}
,當我這樣定義
mediaItem = {
"mediaType":"avatar",
"content": {
"name": "user name",
"avatar": "https://urlToImage
}
}
頭像應該是有效的,但如果我定義頭像作爲
mediaItem = {
"mediaType": "avatar",
"content": "https://urlToImage"
}
它應該拋出一個錯誤,因爲這對於媒體類型的頭像無效。
正在工作,但錯誤報告非常糟糕。在我的測試中,我得到'expected'data.mediaType應該等於常量,data.mediaType應該等於常量,data.mediaType應該等於常量,數據應該完全匹配oneOf'中的一個模式'是否有更好的錯誤輸出?這表明模式應該是什麼? – pedalpete
你使用什麼json模式庫? – erosb
我使用ajv,你熟悉它嗎?大概是一個單獨的問題,我認爲圖書館之間的錯誤會被標準化。 https://github.com/epoberezkin/ajv,我會在那裏看看它。對不起,這個問題困擾你。 – pedalpete