尽管我在OpenAPI spec中看到了示例:

对于我来说,并不明显为什么使用additionalProperties是Map / Dictionary的正确架构。
规范关于additionalProperties不得不说的唯一具体的内容也无济于事:

最佳答案

陈,我认为your answer是正确的。

一些进一步的背景可能会有所帮助:

在JavaScript(这是JSON的原始上下文)中,对象就像是字符串到值的哈希映射,其中某些值是数据,其他值是函数。您可以将每个“名称/值”对视为一个属性。但是JavaScript没有类,因此属性名称不是预定义的,并且每个对象可以具有自己独立的属性集。

JSON Schema使用properties关键字来验证预先已知的名称/值对;并使用additionalProperties(或OpenAPI 2.0中不支持的patternProperties)来验证未知的属性。

为了清楚起见:

  • 属性名称或 map 中的“键”必须为字符串。它们不能是数字或任何其他值。
  • 正如您所说,属性名称应该是唯一的。不幸的是,JSON规范并不严格要求唯一性,但是大多数JSON实现都建议并推荐唯一性。更多背景here
  • propertiesadditionalProperties可以单独使用或组合使用。当单独使用extraProperty时,不带属性时,该对象实际上起map<string, T>的作用,其中T是AdditionalProperties子模式中描述的类型。也许有助于回答您的原始问题。
  • 在针对单个架构评估对象时,如果属性名称与properties中指定的属性名称之一匹配,则其值仅需针对为该属性提供的子模式有效。如果提供了additionalProperties子模式,它将仅用于验证properties映射中未包含的属性。
  • Swagger的核心Java库中实现了additionalProperties的一些限制。我已经记录了这些限制here
  • 09-13 00:38