2011-02-18 1 views
6

간단한 JSON 스키마를 작성했지만 API 입력 호출이 조금 복잡해졌습니다. 내가 JSON의 3 개 매우 다른 형태를 취할 수있는 하나 개의 편안한 최종 경로가 있습니다다른 키에 의존성이있는 더 복잡한 json 스키마 작성

로컬 호스트/foo는

수행 할 수 있습니다

{ "유형": "ice_cream", "콘": "와플" ...}

또는

{ "유형": "hot_dog", "빵" "밀"...}

은 "유형"키 "ice_cream"를 포함하는 경우, I 만 키 "원추형을보고 싶다. "열쇠가 아니라"롤빵 ". 마찬가지로 "type"에 "hot_dog"이 포함되어 있다면 "cone"이 아닌 "bun"만보고 싶을 것입니다. 나는 내가 "ice_cream"타입이나 "hot_dog"타입만을 볼 수 있도록 패턴 매치를 할 수 있다는 것을 알고 있지만, 그 키가 그 값으로 설정되어 있다면 어떤 다른 필드의 요구 사항을 강제하는 법을 모른다. "dependency"라는 json 스키마 필드가 있지만 사용 방법에 대한 좋은 예제를 찾지 못했습니다.

BTW,이 입력 JSON이 좋은 양식 (효과적으로 JSON 구조의 형식을 오버로드하는 경우)인지 모르겠지만 API를 변경할 수있는 옵션이 없습니다. 이후,

{ 
    "description" : "Food", 
    "type" : [ 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "hot_dog" 
        ] 
       }, 
       "bun" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "ketchup" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     }, 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "ice_cream" 
        ] 
       }, 
       "cone" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "chocolate_sauce" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     } 
    ] 
} 

나는 여전히 유효 JSON이 있는지 확실하지 않습니다 : -

+0

나는 이것이 오래된 질문이라는 것을 알고 있지만 v5 *에 * [스위치]가있을 수도 있음을 언급했다. (https://github.com/json-schema/json-schema/wiki/) switch- % 28v5-proposal % 29) 키워드를 사용하십시오. 우리는 실제 초안을 기다려야 할 것입니다 ... – cloudfeet

답변

3

마침내이에 대한 몇 가지 정보를 가지고 그것은 당신과 같이 유효 몇 가지 다른 개체의 조합을 만들 수 있습니다 밝혀 내 Schemavalidator 일부 잘못된 입력에 따라 죽어지만 예상대로 유효한 입력을 받아들입니다.