2016-09-29 30 views
1
{"57ecf565817bc3932d8de349": { 
    "prices": { 

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

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

我如何寫一個JSON模式,其中每個關鍵是不同的(在這裏:2017年7月1日,2017年8月5日),所以我不能使用items在本示例http://json-schema.org/example1.html#definitions(產品模式集)。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" 
    ] 
} 

我在原來的JSON我有很多的日期是這樣的:2017年7月1日,我想避免重複模式每個日期。

+0

您的屬性名稱是完全動態的。您無法爲此編寫架構。 –

+0

@TomRedfern即使每個日期的結構相同,也無法編寫模式? – mitsi

+0

否請參閱下面的答案。您應該定義一個STATIC數據結構。 –

回答

0

模式定義了一個靜態數據結構。

因此,您無法爲動態數據結構編寫架構。

這不僅適用於JSON,也適用於XSD/SQL/protobuf等。架構是一個嚴格的物理藍圖,用於表示某些東西。

您將得到更好的定義靜態類型數據,並做類似:

{ 
    "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" 
      ] 
     } 
    } 
} 

這將讓你有作爲您的實例:

{ 
    "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

你可以用做additionalProperties關鍵字。在此示例中,對象中的每個屬性都必須根據給定的模式進行驗證。

{ 
    "type": "object", 
    "additionalProperties": { 
    "type": "object", 
    "properties": { 
     "summer": { "type": "integer" }, 
     "winter": { "type": "integer" }, 
     "xmas": { "type": "integer" } 
    }, 
    "required": ["summer", "winter", "xmas"] 
    } 
} 
相關問題