虽然我已经看到了中的例子OpenAPI 规范 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#schemaObject:
type: object
additionalProperties:
$ref: '#/definitions/ComplexModel'
这对我来说并不明显why指某东西的用途additionalProperties
是地图/字典的正确模式。
规范必须说的唯一具体内容也无济于事additionalProperties
is:
以下属性取自 JSON 架构定义,但它们的定义已调整为 Swagger 规范。它们的定义与 JSON Schema 中的定义相同,只是当原始定义引用 JSON Schema 定义时,才会使用 Schema 对象定义。
陈 我觉得您的答案 https://stackoverflow.com/a/41240118/776186是正确的。
一些可能有帮助的进一步背景:
JavaScript 是 JSON 的原始上下文,在 JavaScript 中,对象就像字符串到值的哈希映射,其中一些值是数据,其他值是函数。您可以将每个名称/值对视为一个属性。但 JavaScript 没有类,因此属性名称不是预定义的,每个对象都可以有自己独立的属性集。
JSON 模式使用properties
关键字来验证预先已知的名称-值对;和用途additionalProperties
(or patternProperties
,OpenAPI 2.0 中不支持)来验证未知的属性。
为了清楚起见:
- 属性名称或映射中的“键”必须是字符串。它们不能是数字或任何其他值。
- 正如你所说,属性名称should是独一无二的。不幸的是,JSON 规范并不严格要求唯一性,但建议唯一性,并且大多数 JSON 实现都期望唯一性。更多背景here https://stackoverflow.com/questions/21832701/does-json-syntax-allow-duplicate-keys-in-an-object?lq=1.
-
properties
and additionalProperties
可单独或组合使用。当additionalProperties单独使用而没有属性时,该对象本质上充当map<string, T>
其中 T 是additionalProperties 子模式中描述的类型。也许这有助于回答你原来的问题。
- 当针对单个模式评估对象时,如果属性名称与中指定的名称之一匹配
properties
,其值只需针对为该属性提供的子模式有效。这additionalProperties
子模式(如果提供)将仅用于验证以下属性:are not包含在properties
map.
- 有一些限制
additionalProperties
在 Swagger 的核心 Java 库中实现。我已经记录了这些限制here https://support.reprezen.com/support/solutions/articles/6000162892-support-for-additionalproperties-in-swagger-2-0-schemas.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)