2011-02-18 49 views
6

我一直在寫簡單的JSON模式,但我遇到了一個更復雜一點的API輸入調用。我有,可以採取3種非常不同類型的JSON之一寧靜端路線:編寫更復雜的json模式,依賴於其他鍵

本地主機/富

可以採取:

{ 「類型」: 「ice_cream」, 「錐體」: 「華夫餅」 ...}

{ 「類型」:只有我 「小麥」 ...}

如果 「類型」 項中包含 「ice_cream」, 「hot_dog」, 「包子」曾經想看到關鍵「錐「而不是關鍵」小圓麪包「。類似地,如果「type」包含「hot_dog」,我只想看到「bun」而不是「cone」。我知道我可以進行模式匹配,以確保我只能看到類型「ice_cream」或類型「hot_dog」,但我不知道如何強制某些其他字段的要求,如果該鍵設置爲該值。我看到有一個叫做「依賴」的json模式字段,但是我還沒有找到關於如何使用它的好例子。

順便說一句,我不知道這個輸入JSON是不錯的形式(有效地重載它所需的JSON結構的類型),但我沒有選擇更改api。

+0

我知道這是一個老問題,但我想我只是提到v5 *可能會有[`switch`](https://github.com/json-schema/json-schema/wiki/ switch-%28v5-proposal%29)關鍵字,它完全符合你的要求。儘管如此,我們將不得不等待實際選秀。 – cloudfeet 2013-09-18 15:52:52

回答

3

我終於得到了一些有關此信息 - 事實證明,你就可以說是有效的,像這樣幾個不同對象的工會:

{ 
    "description" : "Food", 
    "type" : [ 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "hot_dog" 
        ] 
       }, 
       "bun" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "ketchup" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     }, 
     { 
      "type" : "object", 
      "additionalProperties" : false, 
      "properties" : { 
       "type" : { 
        "type" : "string", 
        "required" : true, 
        "enum": [ 
         "ice_cream" 
        ] 
       }, 
       "cone" : { 
        "type" : "string", 
        "required" : true 
       }, 
       "chocolate_sauce" : { 
        "type" : "string", 
        "required" : true 
       } 
      } 
     } 
    ] 
} 

我仍然不知道這是有效的JSON,因爲我的Schemavalidator死在一些無效的輸入上,但它接受了預期的有效輸入。