15

I trying to map the following JSON to an OpenAPI 2.0 (Swagger 2.0) YAML definition, and I am not sure how to set mixed array types into my schema:

{
  "obj1": [
     "string data",
     1
    ]
}

Now, my OpenAPI definition has:

schema:
  object1:
    type: array
    items:
      type: string

but this doesn't allow integers inside the array.

Is there a way to define a mixed type array?

1 Answer 1

30

The answer depends on which version of the OpenAPI Specification you use.

OpenAPI 3.1

type can be a list of types, so you can write your schema as:

# openapi: 3.1.0

obj1:
  type: array
  items:
    type: [string, integer]
    # or if nulls are allowed:
    # type: [string, integer, 'null']

OpenAPI 3.0.x

Mixed types are supported in OpenAPI 3.0 using oneOf / anyOf and optionally nullable: true to also allow nulls.

# openapi: 3.0.1

obj1:
  type: array
  items:
    oneOf:
      - type: string
        nullable: true  # If nulls are allowed
      - type: integer

OpenAPI 2.0

OpenAPI 2.0 (Swagger 2.0) does not really support mixed-type array and parameters. The most you can do is to use a typeless schema {} for items, which means the items can be anything (except null) – numbers, objects, strings, etc. You cannot specify the exact types for items, but you can add an example of an array with different item types.

# swagger: '2.0'

obj1:
  type: array
  items: {}  # <--- means "any type" (except null)
  example:
    - string data
    - 1

Note: Typeless schema {} can only be used in body parameters and response schemas. Path, header and form parameters require a primitive type for array items.

Sign up to request clarification or add additional context in comments.

2 Comments

where exactly in the spec is this specified? I can't find it in the spec and the editor.swagger.io still considers it an error and doesn't allow me to specifiy multiple types for a property in this way
@CharonME OpenAPI schema definitions are based on JSON Schema, with some limitations. If you use OpenAPI 3.1, use editor-next.swagger.io instead of editor.swagger.io.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.