gist with my solution은 http://jsonschemalint.com으로 표시됩니다. (매우 편리한 도구입니다!)
속성 d
및 e
은 이미 정의되어 있으며 필수 항목은 아닙니다. 이 두 가지 속성이 상호 배타적하기 위해, 우리는 인스턴스가 not
두 속성이있는 스키마와 일치해야한다는 말 :
{
"$schema": "http://json-schema.org/draft-04/schema#",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"},
"c": {"type": "number"},
"d": {"type": "number"},
"e": {"type": "number"}
},
"required": ["a"],
"oneOf": [
{"required": ["b"]},
{"required": ["c"]}
],
"not" : {"required" : ["d","e"]}
}
이 잘 작동,하지만 당신은 당신의 상호 배타적 인 이상 두 가지 속성이있는 경우는 지저분한 점점 시작 그룹. 여기에 더 자세한의 대안이지만까지 확장
"not" : {
"anyOf"{
{"required" : ["d","e"]},
{"required" : ["d","f"]},
{"required" : ["e","f"]},
}
}
: 우리는 재산 f
을 추가하고 d
및 e
에 대한이 상호 배타적 만들고 싶었다 예를 들어, 우리는 세 가지 조합을 허용해야 할 것 상호 배타적 인 속성의 큰 세트 :
"oneOf" : [
{"required" : ["d"]},
{"required" : ["e"]},
{"required" : ["f"]},
{
"not" : {
"anyOf" : [
{"required" : ["d"]},
{"required" : ["e"]},
{"required" : ["f"]}
]
}
}
]
그룹에 추가 된 각 속성에는 정확히 두 행이 필요합니다.
{
"$schema": "http://json-schema.org/draft-04/schema#",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"},
"c": {"type": "number"},
"d": {"type": "number"},
"e": {"type": "number"},
"f": {"type": "number"}
},
"required": ["a"],
"allOf": [
{
"oneOf": [
{"required": ["b"]},
{"required": ["c"]}
]
},
{
"oneOf" : [
{"required" : ["d"]},
{"required" : ["e"]},
{"required" : ["f"]},
{
"not" : {
"anyOf" : [
{"required" : ["d"]},
{"required" : ["e"]},
{"required" : ["f"]}
]
}
}
]
}
]
}
감사를 도와 : 우리의 스키마가 이제 두 개의
oneOf
제약이 있기 때문에, 우리는
allOf
를 사용하여 결합해야합니다. 해결책으로 '{ "a": 1, "b": 1}'또는 "{"a ": 1,"c ": 1}'는 유효하지 않지만 필요합니다. 내 사건에 어떻게 적응할 수 있습니까? – lovelace63솔루션을 보여주기 위해 예제와 설명을 업데이트했습니다. 잘 잡으세요! –
lovelace63, 내 대답을 수락 한 후, 나는 \t 훨씬 깨끗한 솔루션을 발견했다. 이 옵션은 선택적 속성 목록을 반복 할 필요가 없으므로 유지 관리가 더 쉽습니다. 또한 필수 또는 선택적으로 상호 배타적 인 여러 속성 집합을 쉽게 만들 수 있습니다. 제발, 당신이 이것에 어떤 문제라도 보시면 저에게 알려주세요. –