2016-10-27 1 views
1

내가 보낼 수있는 요청 유형이 여러 개 있습니다. "add", "update", "delete"등의 값을 가질 수있는 요청 유형 속성이 있습니다 (예 :). 요청 유형에 따라필요한 속성이 다른 속성의 값에 따라 달라질 때 Json 스키마

, 나는 다른 속성

요청 유형을 위해, "추가 블루"나는 추가 propertie "추가 빨간색을"얻을 것이다, "foo는"을 "추가"를 경우

을 얻을 것이다

요청 유형은 "갱신 ,, 다음"업데이트-XXX ","갱신-YYY ","갱신-XXX 인 경우 예를

""다음 "foo는", "줄을 삭제"

그리고 만약

". ..

두 개 이상의 요청 유형에 대해 몇 가지 추가 속성이 나타날 수 있습니다 (abov의 "foo"참조). 예)

그래서 "request-type"의 값에 따라 다르게 유효성을 검사하고 싶습니다.

는 내가 "oneOf"선택 될 것입니다 어떤 결정할 때 검증이 첫 번째의 값과 일치 할 것이라는 희망에서

"oneOf": [ 
    { 
    ... 
    "properties": { "request-type" : { "enum": ["add"] } 
        "add-red": { ...} 
       } 
    }, 
    { 
    ... 
    "properties": { "request-type" : { "enum": ["update"] } 
        "update-xxx": { ...} 
       } 
    } 

에에 노력했다.

이것은 VS 코드 유효성 검사기가 유효한 스키마라고 생각하지만 그 자체로 "유효"하지만 원하는대로하지 않습니다. 해당 JSON을 항상 첫 번째와 일치하게 작성하면 해당 값으로 "추가"만 허용).

그럼 어떻게해야합니까? 여기서 JSON 형식을 정의 할 수 있으므로 어떻게 든 유효성을 검사 할 수있는 무언가를 사용하도록 요구할 수 있습니다.

여기에 대한 답변은 각 요청 유형에 대해 별도의 추가 속성 세트가 필요하다는 점을 제외하고는 거의 중복되었습니다. JSON schema anyOf validation based on one of properties입니다.

편집 : validation of json schema having oneOf keyword 에 대한 답변에 따르면 내 접근 방식이 작동해야합니다. 어쩌면 이것은 MS VS 코드에서 intellisense의 한계 일 수 있습니다.

EDIT2 : 나는 좀 더 실험 어쩌면이 삭제 끝낼해야합니다 writing more complex json schemas that have dependencies upon other keys

: 그리고 이것은 또 다른 접근 방식을 제공합니다!

+0

유효성 검사기 제한처럼 보입니다. 여기에 귀하의 스키마를보십시오 : http://jsonschemalint.com/#/version/draft-05/markup/json – esp

+0

감사. Intellisense 스타일 완성을 위해 스키마를 사용하는 편집기를 사용하는 것이 정말 편리 할 것입니다. 어떤 제안? –

답변

1

내 자신의 질문에 대답 - 질문의 접근 방식은 잘 작동합니다. http://www.jsonschemavalidator.net/과 같은 유효성 검사기를 사용하여 예상 한 동작을 얻습니다.

Visual Studio 코드의 인텔리 센스는 유용한 지침을 제공 할 수있는 방법으로 해석 할 수 없습니다 (공정한 것은 "oneOf"의 모든 대안을 부분적으로 일치시키는 것을 의미하므로 어려운 문제입니다) "어떤 것이 유효한 지 알아보기)