2015-01-09 26 views
8

爲我寫一個json數組的swagger模型看起來很簡單,例如,如果我有此數組:具有命名元素的數組的Swagger模型

[ 
    { 
    "name": "dave", 
    "number": 123 
    }, 
    { 
    "name": "mary", 
    "number": 456 
    } 
] 

我會爲它編寫以下招搖型號:

"schema": { 
    "type": "array", 
    "items": { 
    "$ref": "Student" 
    } 
} 

"Student": { 
    "id": "Student", 
    "required": [ 
    "name", 
    "number" 
    ], 
    "properties": { 
    "name": { 
     "type": "string" 
    }, 
    "number": { 
     "type": "integer", 
     "format": "int32" 
    } 
    } 
} 

不過,我有以下幾點:

{ 
    "123": { 
    "name": "dave" 
    }, 
    "456": { 
    "name": "mary" 
    } 
} 

我怎樣寫模型這個呢?

在此先感謝。

+0

這不是一個數組,它是一個包含地圖的對象。這是你想要描述的還是樣本中有錯誤?另外,你使用哪個版本的Swagger? – Ron

+0

你說得對,它確實不是一個數組。沒有錯誤,這正是我想描述的json,但我不確定如何去做。我正在使用swagger 2.0(儘管我承認我寫的內容中有大約1.2剩下的)。 – DeZot

+0

如果你想避免手工輸入,你可以試試這個JSON來Swagger定義轉換器:https://roger13.github.io/SwagDefGen/ – Roger

回答

10

要描述請求模型,您需要使用additionalProperties屬性。請注意,這在Swagger 2.0中可用,並且在早期版本中不可用。

"definitions": { 
    "Student": { 
     "type": "object", 
     "required": [ "name" ], 
     "properties": { 
      "name": { 
       "type": "string" 
      } 
     } 
    }, 
    "Students": { 
     "type": "object", 
     "additionalProperties": { 
      "$ref": "#/definitions/Student" 
     } 
    } 
} 

上面你看到Student模型,它目前包含了「名」屬性,但我認爲你將它添加更多。在上面的示例中,「name」屬性是必需的。

第二個模型是Students這是一個包含地圖(additionalProperties)的對象。每個屬性都是Student類型(通過引用模型完成,但理論上可以定義爲內聯)。

你不能做的一件事是聲明鍵(或屬性名)是一個整數或給定類型。這可能受到Swagger 2.0中不可用的patternedProperties的支持。換句話說,沒有限制密鑰內容的技術方法。

+1

感謝你。在我看來,儘管這樣,大佬們並不支持它,因爲當我嘗試時,我看到的只是一個空洞的對象。大搖大擺的編輯器預覽器也向我展示了一個空對象,雖然它不報告任何錯誤。 – DeZot

+0

的確,我相信UI目前不支持'additionalProperties'。隨意打開一個關於它的問題。 – Ron

相關問題