2015-01-15 4 views
0

다음에 속성 이름을 제한하는 더 좋은 해결책이 있습니까?json 스키마의 속성 제한

{ 
    "type": "object", 
    "not": { 
     "anyOf": [{ 
      "required": ["a"] 
     }, { 
      "required": ["b"] 
     }] 
    } 
} 

내가 a 또는 b을 제외한 모든 속성을 수용하고 싶습니다. 솔루션에 대한 작품,하지만 그것은 매우 복잡하고 유효성 검사 오류 메시지가 내 파이썬 유효성 검사기에 이상합니다.

답변

0

당신의 솔루션은 훌륭하고 읽기 쉽습니다. 이상한 유효성 검사 오류 (not 항상 그 복잡하게 만드는)를 만드는 방법을 볼 수 있지만 스키마 자체가 제약 조건을 아주 잘 설명한다고 말할 수 있습니다.

oneOf (예 : {"oneOf": [{}, {"required": ["a"]}]})을 사용하면 몇 바이트 단축 할 수 있지만 읽을 수는 없다고 생각합니다. 또한 patternProperties와 끔찍한 뭔가를 할 수

(즉 "a"/"b" 제외하고는 아무 것도 일치하고 additionalProperties을 사용하는 정규식을), 그러나 다시 나는 그 덜 읽을 생각합니다.

나는 해결책이 있다고 생각합니다.

당신이 patternProperties으로이 작업을 수행하는 방법에 관심이 있다면
0

, 당신이 할 수 있습니다 :

{ 
    "type": "object", 
    "patternProperties": { 
     "[aA]": { 
      "not": {} 
     }, 
     "[bB]": { 
      "not": {} 
     } 
} 

나는 대소 문자를 구분 속성 이름의 거부를 지원하기 위해 유사한 솔루션이 필요했습니다. 초안 4에서, 내가 사용한 구현은 대/소문자를 무시하는 정규식 패턴 "/ i"를 지원하지 않습니다.

관련 문제