2016-06-06 4 views
0

내가 본 대부분의 json 스키마 예제에서 "items"키워드가 "array"와 연결되어있는 것처럼 보입니다. 그러나이 유용한 도구를 사용하여 개체를 사용하여 시도 : http://www.jsonschemavalidator.net/ (JSON 스키마 초안 4) 및 작동합니다. 나는 그것이 적절하다고 느낄지라도 이것이 합법적이라는 어떠한 문서도 발견 할 수 없다.json 스키마 : "객체"내에서 "items"를 사용할 수 있습니까?

"value": { 
     "type": "object", 
     "items": ... 
} 

정말 합법적입니까?

답변

1

다음은 찾고있는 설명서입니다.

일부 유효성 검사 키워드는 하나 이상의 기본 유형에만 적용됩니다. 인스턴스의 기본 유형이 주어진 키워드에 의해 유효성을 검사 할 수없는 경우이 키워드 및 인스턴스에 대한 유효성 검사가 성공해야합니다.

http://json-schema.org/latest/json-schema-validation.html#anchor8

  • 는 개념을 설명 예제로이 스키마를 취합니다. >
  • required
  • 을 무시 - -> 무시

{ "foo": "bar" }

,536 유효성을 검사>
  • maxLength 통과 -

    { 
        "items": { "type": "string" }, 
        "maxLength": 2, 
        "required": ["foo"] 
    } 
    

    ["foo"]

    • items

      유효성을 검사
      • items ->
      • maxLength
      • 무시 -> 무시
      • required
      • -> 무시
      • maxLength - -> 실패>

        • items는 확인하지 않습니다

        "foo" 통과

      • required -> 무시

      3 유효성을 검사

      • items ->
      • maxLength
      • 을 무시 ->
      • required
      • 을 무시 ->이 possibl하지만

      무시 이 방법으로 스키마를 작성하려면 단일 스키마 내에서 유형 키워드를 혼합하지 않는 것이 좋습니다. 대신 anyOf을 사용하면 읽을 수있는 스키마를 얻을 수 있습니다.

      { 
          "anyOf": [ 
          { 
           "type": "string", 
           "maxLength": 2 
          }, 
          { 
           "type": "array", 
           "items": { "type": "string" } 
          }, 
          { 
           "type": "object", 
           "required": "foo" 
          } 
          ] 
      }