2016-09-29 6 views
1
나는 각 키와 다른 JSON 스키마를 쓸 수있는 방법
{"57ecf565817bc3932d8de349": { 
    "prices": { 

    "2017-07-01": { 
     "summer": -1, 
     "winter": -1, 
     "xmas": -1}, 

    "2017-08-05": { 
     "summer": -1, 
     "winter": -1, 
     "xmas": -1} 
    } 
    } 
} 

이 스키마 그래서이 같이 items을 사용할 수 없습니다 예 http://json-schema.org/example1.html#definitions (제품 스키마 세트). 나는이 같은 날짜의 여지가 내 원래 JSON에서JSON 키를 다른 이름

{ 
    "type": "object", 
    "properties": { 
    "57ecf565817bc3932d8de349": { 
     "type": "object", 
     "properties": { 
     "prices": { 
      "type": "object", 
      "properties": { 
      "2017-07-01": { 
       "type": "object", 
       "properties": { 
       "summer": { 
        "type": "integer" 
       }, 
       "winter": { 
        "type": "integer" 
       }, 
       "xmas": { 
        "type": "integer" 
       } 
       }, 
       "required": [ 
       "summer", 
       "winter", 
       "xmas" 
       ] 
      }, 
      "2017-08-05": { 
       "type": "object", 
       "properties": { 
       "summer": { 
        "type": "integer" 
       }, 
       "winter": { 
        "type": "integer" 
       }, 
       "xmas": { 
        "type": "integer" 
       } 
       }, 
       "required": [ 
       "summer", 
       "winter", 
       "xmas" 
       ] 
      } 
      }, 
      "required": [ 
      "2017-07-01", 
      "2017-08-05" 
      ] 
     } 
     }, 
     "required": [ 
     "prices" 
     ] 
    } 
    }, 
    "required": [ 
    "57ecf565817bc3932d8de349" 
    ] 
} 

:

내 스키마입니다 2017년 7월 1일을, 나는 각 날짜에 대한 스키마를 반복하지 않도록하고 싶습니다.

+0

속성 이름은 완전히 동적입니다. 이를위한 스키마를 작성할 수있는 방법은 없습니다. –

+0

@TomRedfern 각 날짜에 대해 동일한 구조가 있더라도 스키마를 작성할 방법이 없습니까? – mitsi

+0

아니, 내 대답을 참조하십시오. STATIC 데이터 구조를 정의해야합니다. –

답변

0

스키마는 정적 데이터 구조를 정의합니다.

따라서 동적 데이터 구조에 대한 스키마를 작성할 수 없습니다.

이것은 JSON뿐 아니라 XSD/SQL/protobuf 등에서도 마찬가지입니다. 스키마는 무언가가 어떻게 보이는지에 대한 철저한 물리적 청사진입니다.

당신은 더 나은 귀하의 데이터에 대한 정적 유형을 정의하고, 같은 일을 할 것입니다 : 당신은이 작업을 수행 할 수 있습니다

{ 
    "resource":{ 
     "hash":"57ecf565817bc3932d8de349", 
     "prices":[ 
      { 
       "date":"2017-07-01", 
       "summer":-1, 
       "winter":-1, 
       "xmas":-1 
      }, 
      { 
       "date":"2017-08-05", 
       "summer":-1, 
       "winter":-1, 
       "xmas":-1 
      } 
     ] 
    } 
} 
1

: 이것은 당신이 당신의 인스턴스로 가질 수 있도록 할

{ 
    "type":"object", 
    "properties":{ 
     "resource":{ 
      "type":"object", 
      "properties":{ 
       "hash":{ 
        "type":"string" 
       }, 
       "prices":{ 
        "type":"array", 
        "items":{ 
         "$ref":"#/definitions/price" 
        }, 
        "minItems":1 
       } 
      }, 
      "required":[ 
       "hash", 
       "prices" 
      ] 
     } 
    }, 
    "definitions":{ 
     "price":{ 
      "type":"object", 
      "properties":{ 
       "date":{ 
        "type":"string" 
       }, 
       "summer":{ 
        "type":"integer" 
       }, 
       "winter":{ 
        "type":"integer" 
       }, 
       "xmas":{ 
        "type":"integer" 
       } 
      }, 
      "required":[ 
       "date", 
       "summer", 
       "winter", 
       "xmas" 
      ] 
     } 
    } 
} 

additionalProperties 키워드 이 예제에서 객체의 모든 속성은 지정된 스키마에 대해 유효성을 검사해야합니다.

{ 
    "type": "object", 
    "additionalProperties": { 
    "type": "object", 
    "properties": { 
     "summer": { "type": "integer" }, 
     "winter": { "type": "integer" }, 
     "xmas": { "type": "integer" } 
    }, 
    "required": ["summer", "winter", "xmas"] 
    } 
} 
관련 문제