尽管我在OpenAPI spec中看到了示例:
对于我来说,并不明显为什么使用additionalProperties
是Map / Dictionary的正确架构。
规范关于additionalProperties
不得不说的唯一具体的内容也无济于事:
最佳答案
陈,我认为your answer是正确的。
一些进一步的背景可能会有所帮助:
在JavaScript(这是JSON的原始上下文)中,对象就像是字符串到值的哈希映射,其中某些值是数据,其他值是函数。您可以将每个“名称/值”对视为一个属性。但是JavaScript没有类,因此属性名称不是预定义的,并且每个对象可以具有自己独立的属性集。
JSON Schema使用properties
关键字来验证预先已知的名称/值对;并使用additionalProperties
(或OpenAPI 2.0中不支持的patternProperties
)来验证未知的属性。
为了清楚起见:
properties
和additionalProperties
可以单独使用或组合使用。当单独使用extraProperty时,不带属性时,该对象实际上起map<string, T>
的作用,其中T是AdditionalProperties子模式中描述的类型。也许有助于回答您的原始问题。 properties
中指定的属性名称之一匹配,则其值仅需针对为该属性提供的子模式有效。如果提供了additionalProperties
子模式,它将仅用于验证properties
映射中未包含的属性。 additionalProperties
的一些限制。我已经记录了这些限制here。