当前位置: 首页 > 知识库问答 >
问题:

如何为'map'对象中的属性名编写OpenAPI3(Swagger)规范?

杜俊远
2023-03-14

我试图描述的API有一个结构,其中根对象可以包含任意数量的子对象(属性本身就是对象)。根对象中的“键”或属性是子对象的唯一标识符,值是子对象的其余数据。

{
  "child1": { ... bunch of stuff ... },
  "child2": { ... bunch of stuff ... },
  ...
}

可以类似地将其建模为数组,例如:

[
  { "id": "child1", ... bunch of stuff ... },
  { "id": "child2", ... bunch of stuff ... },
  ...
]

但这既使得识别属性在结构上不那么清楚,又使得子ID之间的唯一性是隐式的,而不是显式的,所以我们想使用一个对象或一个映射。

"Parent": {
  "additionalProperties": {
    "$ref": "#/components/schemas/Child",
  }

共有1个答案

邓才
2023-03-14

你的例子是正确的。

如何记录对象中“键”的限制?理想情况下,我想说“它不是任意的字符串,而是与子字符串相对应的ID”。这有任何支持吗?

OAS3.1完全支持JSON模式2020-12,包括patternproperties。此关键字允许您使用正则表达式定义字典键的格式:

"Parent": {
  "type": "object",
  "patternProperties": {
    "^child\d+$": {
      "$ref": "#/components/schemas/Child"
    }
  },
  "description": "A map of `Child` schemas, where the keys are IDs that correspond to the child"
}
"Parent": {
  "type": "object",
  "propertyNames": {
    "enum": ["foo", "bar"]
  },
  "additionalProperties": {
    "$ref": "#/components/schemas/Child"
  }
}
"Parent": {
  "type": "object",
  "additionalProperties": {
    "$ref": "#/components/schemas/Child"
  },
  "description": "A map of `Child` schemas, where the keys are IDs that correspond to the child",
  "example": {
    "child1": { ... bunch of stuff ... },
    "child2": { ... bunch of stuff ... },
  }
// Keys can be: key1, key2, key3

"Parent": {
   "type": "object",
   "properties": { 
      "key1": { "$ref": "#/components/schemas/Child" },
      "key2": { "$ref": "#/components/schemas/Child" },
      "key3": { "$ref": "#/components/schemas/Child" }
   }
}
 类似资料:
  • 问题内容: 我的代码中具有对象属性,如下所示: 问题是我有100多个字段名称,需要动态写入属性名称。否则,对象名称和属性的键将始终相同。所以我尝试了: 希望可以动态更改属性名称并访问正确的值。但是,我一直在stdClass :: $ field中得到’undefined property $ field;。 我或多或少尝试在执行之前动态编写php,以便它可以输出适当的值。关于如何处理此问题的想法?

  • 根据指定对象创建一个新对象,使其所有的 key 都小写。 使用 Object.keys() 和 Array.reduce() 根据指定对象创建一个新对象。 使用 String.toLowerCase() 将原始对象中的每个 key 转换为小写。 const lowercaseKeys = obj => Object.keys(obj).reduce((acc, key) => { ac

  • 我们有一个可能包含字段“extraInfo”的响应类型“Error”。 一个例子是: 另一个可能是: 由于它是一个自由形式的对象,有没有办法在Swagger中为它提供示例? 在规范中找不到它:https://swagger.io/docs/specification/data-models/data-types/

  • 我使用的是类似于: 这给了我这样的输出: 我想访问键[0]中的字符串值。当我尝试做以下事情时: 我得到这个错误: 分析错误:语法错误,意外的T_DNUMBER 这两个数字/整数似乎有问题。

  • 问题内容: JSON编码的Google API返回了这样的对象 谁知道我该如何获取价值? 显然返回 注意:未定义的变量:在/ usr / local / … 致命错误:无法访问/ ....中的空属性 问题答案: 由于属性的名称是string ,因此可以这样访问它: 另外,您可以将属性的名称放在变量中,然后像这样使用它: 您可以在repl.it上看到它们的实际作用:https ://repl.it/

  • 在 PowerShell 中,如何通过指定对象的名称(字符串)来获取对象的属性值?我想要类似这样的东西: 是否有类似于“获取属性名称”的内容?