def from_object(cls, o, base_uri=None, parent_curies=None, draft=AUTO):
        """Returns a new ``Document`` based on a JSON object or array.

        Arguments:

        - ``o``: a dictionary holding the deserializated JSON for the new
                 ``Document``, or a ``list`` of such documents.
        - ``base_uri``: optional URL used as the basis when expanding
                               relative URLs in the document.
        - ``parent_curies``: optional ``CurieCollection`` instance holding the
                             CURIEs of the parent document in which the new
                             document is to be embedded. Calling code should
                             not normally provide this argument.
        - ``draft``: a ``Draft`` instance that selects the version of the spec
                     to which the document should conform. Defaults to
                     ``drafts.AUTO``.

        """

        if isinstance(o, list):
            return [cls.from_object(x, base_uri, parent_curies, draft)
                    for x in o]

        return cls(o, base_uri, parent_curies, draft)