def get_json_types(annotated_type: SuperType) -> List[str]:
    """Returns the json types for the provided annotated type.

    This handles special cases for when we encounter UnionType and an Array.
    UnionType's will have all valid types returned.  An Array will document
    what the items type is by placing that value in brackets, e.g. `list[str]`.

    :param annotated_type: A subclass of SuperType.
    :returns: A list of json types.
    """
    types = []
    if issubclass(annotated_type, UnionType):
        types = [str(t.native_type.__name__) for t in annotated_type.types]
    elif issubclass(annotated_type, Array):
        # Include the type of items in the list if items is defined.
        if annotated_type.items is not None:
            if not isinstance(annotated_type.items, list):
                # items are all of the same type.
                types.append('list[{}]'.format(
                    str(annotated_type.items.native_type.__name__)))
            else:
                # items are different at each index.
                _types = [
                    str(t.native_type.__name__) for t in annotated_type.items]
                types.append('list[{}]'.format(','.join(_types)))
        else:
            types.append('list')
    else:
        types.append(str(annotated_type.native_type.__name__))

    return types
Returns the json types for the provided annotated type.

    This handles special cases for when we encounter UnionType and an Array.
    UnionType's will have all valid types returned.  An Array will document
    what the items type is by placing that value in brackets, e.g. `list[str]`.

    :param annotated_type: A subclass of SuperType.
    :returns: A list of json types.