必要: "A" することができjsonschemaの検証は、条件付きで、私はいつも2つの特性を有するJSONオブジェクトを検証する必要が
- タイプ
- 名
タイプを、
タイプが "A"である場合、プロパティ "foo"も必須であり、追加のプロパティは許可されません。
OK:
{
"type": "A",
"name": "a",
"foo": "a",
}
ないOK:タイプが "B" であるとき、
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
プロパティ "バー" が要求され、追加のプロパティが許可されません。
タイプが "C"の場合、プロパティ "bar"が必須で、必要に応じて "zen"プロパティも存在できます。
OK:
{
"type": "C",
"name": "a",
"bar": "a",
"zen": "a"
}
{
"type": "C",
"name": "a",
"bar": "a",
}
ないOK:
{
"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"],
},
]
}
私の問題は、「anyOf」内のオブジェクトの内部でfalseにフィールド「additionalpropertiesを」を設定することは私に期待される結果が得られていないということです。それは付加的な特性を有しているにもかかわらず、
例えば以下のJSONは「笑」
{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}
私が試した例とこのソリューションが私にとってはうまくいかない理由を含むように投稿を更新しました – cunfusu