code

JSON Schema - 다른 필드의 값을 기준으로 필드를 지정해야 합니다.

starcafe 2023. 2. 16. 21:56
반응형

JSON Schema - 다른 필드의 값을 기준으로 필드를 지정해야 합니다.

이것이 스키마 드래프트 03에서 가능한지 궁금합니다.의존관계는 다른 곳에서 작업하고 있습니다.아마도 그것들을 특정하기 위해 필요한 것은 창조적인 사용일 것입니다.required특정 분야의 특성입니다.

현재 최선의 시도(실패하지 않음)를 통해 제가 무엇을 원하는지 알 수 있을 것입니다.기본적으로 필요한 값을 지정하고 다른 필드에 특정 값이 있는 경우 옵션 값을 지정합니다.

{
    "description"   : "An address...",
    "type" : "object",
    "properties" : {
        "postcode": {
            "type" : "string",
            // postcode should be required by default
            "required" : true,      
            // postcode shouldn't be required if the country is new zealand 
            "dependencies" : {
                "country" : {
                    "enum" : ["NZ", "NZL", "NEW ZEALAND"]
                },
                "postcode" : {
                    "required" : false      
                }
            }
        },
        "country": {
            "type" : "string",
            "enum" : [
                // various country codes and names...
            ],
            "default" : "AUS"
        }
    }
}

이것은 드래프트 버전 3에서는 확실히 가능합니다.허용된 국가의 전체 목록이 있으므로 다음과 같은 작업을 수행할 수 있습니다.

{
    "type": [
        {
            "title": "New Zealand (no postcode)",
            "type": "object",
            "properties": {
                "country": {"enum": ["NZ", "NZL", "NEW ZEALAND"]}
            }
        },
        {
            "title": "Other countries (require postcode)",
            "type": "object",
            "properties": {
                "country": {"enum": [<all the other countries>]},
                "postcode": {"required": true}
            }
        }
    ],
    "properties": {
        "country": {
            "type" : "string",
            "default" : "AUS"
        },
        "postcode": {
            "type" : "string"
        }
    }
}

따라서 스키마에 대해 우편번호가 필요한 국가용과 필요하지 않은 국가용 두 가지 하위 유형을 정의합니다.

EDIT - v4는 매우 유사합니다.최상위 수준 이름 바꾸기"type"로 배열하다."oneOf".

초안 4에 대한 솔루션을 찾고 계신 분은dependencies키워드와 함께enum키워드:

{
    "type": "object",
    "properties": {
        "play": {
            "type": "boolean"
        },
        "play-options": {
            "type": "string"
        }
    },
    "dependencies": {
        "play-options": {
            "properties": {
                "play": {
                     "enum": [true]
                }
            }
        }
    }
}

이렇게 해서play-options항상 필요함play가치가 있다true.

최신 스키마에서는oneOf이 일을 하는 것을 조건으로 합니다.

{
    "description"   : "An address...",
    "type" : "object",
    "properties" : {
        "postcode": {
            "type" : "string"
        },
        "country": {
            "type" : "string",
            "enum" : [
                // various country codes and names...
            ],
            "default" : "AUS"
        }
    },
    "oneOf": [
        {
          "properties": {
            "country": { "enum" : ["NZ", "NZL", "NEW ZEALAND"] }
          }
        },
        { "required": ["postcode"] } 
      ]
}

oneOf조건을 사용하려면 어레이의 조건 중 하나가 참이어야 합니다.

방금 03 버전의 스펙을 살펴보았는데, 당신이 설명하는 것은 불가능할 것 같습니다."단순 의존성"이 절대 아니며 "Schema Dependency"의 설명에는 자산의 가치를 고려하는 방법이 전혀 없습니다.

당신에게 필요한 것은 "조건부 스키마 의존성"인 것 같습니다.

여기서는 심플과 스키마의 의존관계로 실현 가능한 기능에 대해 설명합니다.http://groups.google.com/group/json-schema/msg/8145690ebb93963b

조건부 종속성을 지원할 계획이 있는지 해당 그룹에 문의할 수 있습니다.

언급URL : https://stackoverflow.com/questions/9029524/json-schema-specify-field-is-required-based-on-value-of-another-field

반응형