Swagger解析具有未定义属性的关联数组

时间:2018-02-07 09:43:22

标签: json swagger swagger-2.0

我试图找出如何实现Swagger解析具有未定义数值的关联数组。

我有类似的情况,区别在于这些其他情况是完全正常的(我事先知道所有属性'名称)。但是,我可能不知道(实际上我不想知道)这些可能是这些情况下值的名称。

具有未定义语言代码数的关联数组的JSON示例。每个语言代码键都有一个未定义的翻译数组,每个翻译都有一个键和一个值。 "说明"和" ACCESS_ON_FOOT"在这种情况下是翻译的关键。但是可能还有其他人而且我不想知道所有这些。它应该是动态的。

 {
  "ca": {
    "DESCRIPTION": "Catalan description",
    "ACCESS_ON_FOOT": "Catalan Access on foot"
  },
  "en": {
    "DESCRIPTION": "English Description",
    "ACCESS_ON_FOOT": "English Access on foot"
  },
  "es": {
    "DESCRIPTION": "Spanish Description",
    "ACCESS_ON_FOOT": "Spanish Access on foot"
  }
}

问题是我不知道如何将这个未定义语言代码示例指定为对象的值。

我是我的另一个案例,我让它很容易,因为我知道我有哪些价值观。我当然可以添加" ca"," en"和" es"作为数组类型的属性。但是如果我添加语言,我应该回到Swagger规范并重新制作它,我的想法是使添加新语言的过程完全脱离API规范。

有没有办法在Swagger 2.0中定义一组未确定的属性?

更新

这似乎可以解决我不得不解析这个JSON的问题:

Translations:
type: "object"
additionalProperties:
  type: object
  additionalProperties:
    type: string

additionalProperties选项似乎是关联数组的正确选项。至少根据规范: https://swagger.io/docs/specification/data-models/dictionaries/

Swagger编辑器(https://editor.swagger.io/)向我展示了我描述的相同JSON格式,但我仍然在生成的客户端中获得空输出。

1 个答案:

答案 0 :(得分:0)

在做了更多的研究之后,我似乎不清楚关联数组在Swagger 2.0中有效。我很想做这个工作。最后,我选择了另一种替代方案,并使我的API端点返回略有不同的结果。

我有一个带有2个维度的关联数组,并存储了值。

现在我有一个包含3个属性的一维数组:

Translations:
type: "object"
properties:
  language_code:
    type: "string"
  type:
    type: "string"
  content:
    type: "string"

由于Translations在定义集中,我可以轻松地在端点的响应中包含一个Translations数组,如:

responses:
    200:
      description: "successful operation"
      schema:
        type: "array"
        items:
          $ref: "#/definitions/Translations"

这就像一个魅力。

只要您没有太多自由的情况,Swagger似乎工作得非常好。当发生这种情况时,你需要改变主意,找到另一种做事的方法。

P.S。首先使用您的API定义(就像您对测试和代码所做的那样)。首先是API定义,然后测试然后编码。