我需要驗證一個JSON對象總是有2個屬性:jsonschema驗證條件必需的
- 類型
- 名稱
類型可以是 「A」, 「B」或「C」,
當類型爲「A」時,還需要屬性「foo」並且不允許其他屬性。
OK:
{
"type": "A",
"name": "a",
"foo": "a",
}
不正常:
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
當類型是 「B」,該屬性 「欄」 是必需的,沒有額外的性能是允許的。
當類型爲「C」時,屬性「bar」是必需的,並且可選地還可以存在「zen」屬性。
OK:
{
"type": "C",
"name": "a",
"bar": "a",
"zen": "a"
}
{
"type": "C",
"name": "a",
"bar": "a",
}
不正常:
{
"type": "C",
"name": "a",
"bar": "a",
"lol": "a"
}
不幸的是,優秀的答案,這question部分覆蓋我的情況,但是我沒有設法建立,對我工作的jsonschema。
編輯:
這裏是我試過了。
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["A", "B", "C"]
},
"name": {"type": "string"},
"foo": {"type": "string"},
"bar": {"type": "string"},
"zen": {"type": "string"},
},
"anyOf": [
{
"properties": {"type": {"enum": ["A"]}},
"required": ["foo"],
},
{
"properties": {"type": {"enum": ["B"]}},
"required": ["bar"],
},
{
"properties": {"type": {"enum": ["C"]}},
"required": ["bar"],
},
]
}
我的問題是,設置字段「additionalProperties」的對象裏面假的「anyOf」不給我預期的結果。
例如以下JSON通過驗證,儘管它具有附加屬性「笑」
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
我更新了我的文章,包括我試過的例子以及爲什麼這個解決方案不適用於我的原因 – cunfusu