JSON 架构:如何扩展更多属性?
JSON Schema: How to extend with more properties?
假设我有一个简单的 JSON 比如:
"values": {
"A": 0,
"B": 0,
"C": 0,
"D": 0,
"E": 0,
}
A、B、C 是基本模式 T1 的一部分,而 D、E 是扩展模式 T2 的一部分。因此模式 T1 有 3 个属性,而 T2 有 5 个属性。我想避免在两种模式中都写 A、B、C 两次。
JSON 架构中是否有扩展属性列表的方法?
如果你想以反映扩展对象的方式拆分你的模式,其中一些模式有 additionalProperties: false
,你需要提升 additionalProperties: false
。
您可以在每个架构中使用一个定义来定义没有 additionalProperties: false 的对象,然后根架构 allOf 引用具有 additionalProperties: true 的定义。那么在其他的schema中,可以参考之前schema的定义。
不幸的是,这是 draft-7 的一个限制。在 draft-8 中,可以用一个新的关键字来做你想做的事情,但它还没有发布。
假设我有一个简单的 JSON 比如:
"values": {
"A": 0,
"B": 0,
"C": 0,
"D": 0,
"E": 0,
}
A、B、C 是基本模式 T1 的一部分,而 D、E 是扩展模式 T2 的一部分。因此模式 T1 有 3 个属性,而 T2 有 5 个属性。我想避免在两种模式中都写 A、B、C 两次。
JSON 架构中是否有扩展属性列表的方法?
如果你想以反映扩展对象的方式拆分你的模式,其中一些模式有 additionalProperties: false
,你需要提升 additionalProperties: false
。
您可以在每个架构中使用一个定义来定义没有 additionalProperties: false 的对象,然后根架构 allOf 引用具有 additionalProperties: true 的定义。那么在其他的schema中,可以参考之前schema的定义。
不幸的是,这是 draft-7 的一个限制。在 draft-8 中,可以用一个新的关键字来做你想做的事情,但它还没有发布。