Retrieves all array or dictionary elements for '*' JSON path marker.

    :param dict|list data_obj: The current data object.
    :param str xj_path: A json path.
    :param bool create_dict_path create a dict path.
    :return: tuple with two values: first is a result and second
             a boolean flag telling if this value exists or not.

def _full_sub_array(data_obj, xj_path, create_dict_path):
    """Retrieves all array or dictionary elements for '*' JSON path marker.

    :param dict|list data_obj: The current data object.
    :param str xj_path: A json path.
    :param bool create_dict_path create a dict path.
    :return: tuple with two values: first is a result and second
             a boolean flag telling if this value exists or not.
    """

    if isinstance(data_obj, list):
        if xj_path:
            res = []
            for d in data_obj:
                val, exists = path_lookup(d, xj_path, create_dict_path)
                if exists:
                    res.append(val)
            return tuple(res), True
        else:
            return tuple(data_obj), True
    elif isinstance(data_obj, dict):
        if xj_path:
            res = []
            for d in data_obj.values():
                val, exists = path_lookup(d, xj_path, create_dict_path)
                if exists:
                    res.append(val)
            return tuple(res), True
        else:
            return tuple(data_obj.values()), True
    else:
        return None, False