>

select 를 줄 수 있습니까  사건과 일치하는 스키마?

사용 사례는 허용되는 값 목록에서 선택하고 일치시키려는 것입니다.

{
  "type": "object",
  "properties": {
    "addressCountry": {
      "type": ["string", "null"]
    }
  },
  "select": {
    "$data": "0/addressCountry"
  },
  "selectIf": {
    "type": "string",
    "enum": ["FR", "JP", "US", "NZ", "DE"]
  },
  "selectThen": {
    "addressCountry": {
      "type": "string"
    }
  }
}

편집 : selectIf 참고  그리고 selectThen  AJV가 지원하는 키워드가 아닙니다. 그것은 selectCases 를 지원하지 않습니다  그리고 selectDefault 그러나 selectCases  각 사례를 개별적으로 진술해야합니다. 내 질문은 여러 사례에서 일치하고 단일 정의를 사용할 수 있는지에 관한 것입니다.

  • 답변 # 1

    @Relequestual은 SO 외부에서이 문제를 해결하도록 도와주었습니다. 나는 select 를 사용할 필요가 없었습니다  전혀 if/then/else 를 사용할 수 있습니다  이렇게 :

    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "contactByPost": {
          "type": "boolean"
        },
        "streetAddress1": {
          "type": ["string", "null"]
        },
        "streetAddress2": {
          "type": ["string", "null"]
        },
        "streetAddress3": {
          "type": ["string", "null"]
        },
        "locality": {
          "type": ["string", "null"]
        },
        "region": {
          "type": ["string", "null"]
        },
        "postCode": {
          "type": ["string", "number", "null"]
        },
        "country": {
          "type": ["string", "null"]
        }
      },
      "if": {
        "type": "object",
        "properties": {
          "contactByPost": {
            "type": "boolean",
            "const": true
          }
        }
      },
      "then": {
        "if": {
          "type": "object",
          "properties": {
            "country": {
              "type": "string",
              "enum": ["JP", "US"]
            }
          }
        },
        "then": {
          "type": "object",
          "properties": {
            "contactByPost": { "type": "boolean" },
            "streetAddress1": { "type": "string" },
            "locality": { "type": "string" },
            "region": { "type": "string" },
            "postCode": { "type": ["string", "number"] },
            "country": { "type": "string" }
          },
          "required": ["streetAddress1", "locality", "region", "postCode", "country"]
        },
        "else": {
          "type": "object",
          "properties": {
            "contactByPost": { "type": "boolean" },
            "streetAddress1": { "type": "string" },
            "locality": { "type": "string" },
            "region": { "type": ["string", "null"] },
            "country": { "type": "string" }
          },
          "required": ["streetAddress1", "locality", "country"]
        }
      }
    }
    
    

    다음 결과를 제공합니다 :

    // Valid
    {
      "contactByPost": false
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": "State",
      "postCode": "12345",
      "country": "JP"
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": "State",
      "postCode": "12345",
      "country": "US"
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": "State",
      "postCode": "12345",
      "country": "NZ"
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": null,
      "postCode": null,
      "country": "NZ"
    }
    // Invalid
    {
      "contactByPost": true
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": null,
      "postCode": null,
      "country": "JP"
    }
    {
      "contactByPost": true,
      "streetAddress1": "123 Alphabet St",
      "streetAddress2": null,
      "streetAddress3": null,
      "locality": "City",
      "region": null,
      "postCode": null,
      "country": "US"
    }
    
    

  • 이전 c - 부동 소수점 값 변환
  • 다음 Excel VBA 사용자 양식 기존 날짜 유효성 검사