2015-01-15 189 views
0

是否有更好的解決方案來限制屬性名稱,然後跟隨?限制JSON模式中的屬性

{ 
    "type": "object", 
    "not": { 
     "anyOf": [{ 
      "required": ["a"] 
     }, { 
      "required": ["b"] 
     }] 
    } 
} 

我願意接受除ab任何屬性。有關作品的解決方案,但它非常複雜,我的python驗證器中的驗證錯誤消息很奇怪。

回答

0

您的解決方案很好,可讀性強。我可以看到它是如何產生奇怪的驗證錯誤(not總是使這些錯誤變得複雜),但我認爲模式本身很好地解釋了約束條件。

使用oneOf(例如{"oneOf": [{}, {"required": ["a"]}]})可以縮短几個字節,但我認爲它不可讀。

你也可以做一些可怕的事情與patternProperties(即除了做"a"/"b"匹配任何東西,然後使用additionalProperties正則表達式),但同樣我認爲這是不太可讀。

我認爲你有的解決方案是好的。

0

如果你有興趣在如何與patternProperties做到這一點,你可以這樣做:

{ 
    "type": "object", 
    "patternProperties": { 
     "[aA]": { 
      "not": {} 
     }, 
     "[bB]": { 
      "not": {} 
     } 
} 

我需要一個類似的解決方案,支持甩不區分大小寫的屬性名稱。從草案4開始,我使用的實現不支持正則表達式模式「/ i」來忽略大小寫。