2015-01-09 15 views
8

Viết mô hình vênh vang cho một mảng json có vẻ khá đơn giản đối với tôi, ví dụ: nếu tôi có mảng này:Mô hình dao động cho một mảng có các phần tử được đặt tên

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

Tôi sẽ viết mô hình vênh vang sau cho nó:

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

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

Tuy nhiên, tôi đã điều sau đây:

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

Làm thế nào để viết các mô hình cho cái này?

Xin cảm ơn trước.

+0

Đó không phải là một mảng, đó là một đối tượng có bản đồ trong đó. Đó là những gì bạn đang tìm kiếm để mô tả hoặc là có một sai lầm trong mẫu? Ngoài ra, bạn sử dụng phiên bản Swagger nào? – Ron

+0

Bạn nói đúng, nó không phải là một mảng thực sự. Không có sai lầm, nó là chính xác các json tôi muốn mô tả, nhưng tôi không chắc chắn làm thế nào để đi về nó. Tôi đang sử dụng swagger 2.0 (mặc dù tôi thừa nhận có một số 1.2 thức ăn thừa trong những gì tôi đã viết). – DeZot

+0

Nếu bạn muốn tránh gõ bằng tay, bạn có thể thử công cụ chuyển đổi JSON sang Swagger định nghĩa này: https://roger13.github.io/SwagDefGen/ – Roger

Trả lời

10

Để mô tả mô hình yêu cầu, bạn cần sử dụng thuộc tính additionalProperties. Hãy nhớ rằng, điều này có sẵn trong Swagger 2.0 và không có sẵn trong các phiên bản trước đó.

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

Ở trên, bạn thấy mô hình Student, hiện có chứa thuộc tính "tên", mặc dù tôi cho rằng bạn sẽ thêm nhiều hơn vào nó. Từ ví dụ của bạn ở trên, thuộc tính "tên" là bắt buộc.

Mô hình thứ hai là Students là một đối tượng chứa bản đồ (bổ sungProperties). Mỗi thuộc tính là loại Student (được thực hiện bằng cách tham chiếu mô hình, nhưng về mặt lý thuyết có thể đã được xác định nội tuyến).

Điều bạn không thể làm là khai báo rằng khóa (hoặc tên thuộc tính) là một số nguyên hoặc của một kiểu nhất định. Điều đó có thể đã được hỗ trợ với các patternedProperties mà không có sẵn trong Swagger 2.0. Nói cách khác, không có cách nào để hạn chế nội dung của khóa.

+1

Cảm ơn vì điều này. Dường như với tôi mặc dù con dao găm-ui vẫn chưa hỗ trợ nó, khi tôi thử nó, tất cả những gì tôi thấy là một vật thể trống rỗng. Trình xem trước của trình chỉnh sửa vênh vang cho tôi xem một đối tượng trống, mặc dù nó không báo cáo bất kỳ lỗi nào. – DeZot

+0

True, tôi tin rằng giao diện người dùng hiện không hỗ trợ 'additionalProperties'. Vui lòng mở một vấn đề về nó. – Ron

Các vấn đề liên quan