Create a swagger/open API response with array of un-named objects

12,432

The answer depends on which version of OpenAPI you use.

OpenAPI 3.0 supports oneOf, so it's possible to define multiple schemas for array items:

openapi: 3.0.0
...

paths:
  /something:
    get:
      responses:
        '200':
          description: success
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:   # <---------
                    - type: array
                      items:
                        type: object
                        properties:
                          prop1:
                            type: string
                          prop2:
                            type: string
                    - type: object
                      properties:
                        key:
                          type: integer
                      required:
                        - key

OpenAPI 2.0 does not support oneOf or mixed types. The most you can do is use the typeless schema, which means the array items can be anything - objects, arrays or primitives - but you can't specify the exact types.

swagger: '2.0'
...
paths:
  /:
    get:
      produces:
        - application/json
      responses:
        '200':
          description: success
          schema:
            type: array
            items: {}   # <---------

            # Example to display in Swagger UI:
            example:
              - - prop1: hello
                  prop2: hello again
                - prop1: bye
                  prop2: bye again
              - key: 123
Share:
12,432
amp
Author by

amp

Updated on June 28, 2022

Comments

  • amp
    amp almost 2 years

    I get the response from an http request in the following form: it is an array of un-named array(s) and object(s). I cannot figure out the proper Swagger (Open API) specification for this case.

    [
      [
        {
          "prop1": "hello",
          "prop2": "hello again"
        },
        {
          "prop1": "bye",
          "prop2": "bye again"
        }
      ],
      {
        "key": 123
      }
    ]
    
  • Helen
    Helen over 6 years
    This definition is not valid, because items requires a single type and not an array.
  • Sean Aitken
    Sean Aitken about 4 years
    Ya know, I saw this and giggled.. but then I was studying the JSON schema spec, and it looks like arrays ARE valid! See: json-schema.org/draft/2019-09/…