Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将MongoEngine文档作为JSON返回_Python_Flask_Mongoengine - Fatal编程技术网

Python 将MongoEngine文档作为JSON返回

Python 将MongoEngine文档作为JSON返回,python,flask,mongoengine,Python,Flask,Mongoengine,不太确定这是否真的很简单,但我真的找不到关于这个主题的任何东西。但是,无论是使用常规的MongoEngine库,还是在我基于Flask的网站上使用Flask MongoEngine,都可以将MongoEngine文档作为直接JSON返回吗 谢谢 在0.8中有帮助程序,请参见 同时,您必须直接使用pymongo的json_utils: from bson import json_util json_util.dumps(MyDoc._collection_obj.find(MyDoc.object

不太确定这是否真的很简单,但我真的找不到关于这个主题的任何东西。但是,无论是使用常规的MongoEngine库,还是在我基于Flask的网站上使用Flask MongoEngine,都可以将MongoEngine文档作为直接JSON返回吗


谢谢

在0.8中有帮助程序,请参见

同时,您必须直接使用pymongo的json_utils:

from bson import json_util
json_util.dumps(MyDoc._collection_obj.find(MyDoc.objects()._query))

正确的解决方法可能是:

from bson import json_util
objects = MyDoc.objects()
json_util.dumps(objects._collection_obj.find(objects._query))

当使用场投影或排序时,Ross和Jellyflower的变通方法不起作用

更一般的解决方法:

from bson import json_util
json = json_util.dumps(query._cursor)

更新:感谢
给_mongo()
方法使用建议

最后,我提出了以下解决方案:

from json import JSONEncoder

from mongoengine.base import BaseDocument


class MongoEncoder(JSONEncoder):
    def default(self, o):
        if isinstance(o, BaseDocument):
            data = o.to_mongo()
            # might not be present if EmbeddedDocument
            o_id = data.pop('_id', None)
            if o_id:
                data['id'] = str(o_id['$oid'])
            data.pop('_cls', None)
            return data
        else:
            return JSONEncoder.default(self, o)


# consider `obj` to be MongoEngine object
json_data = json.dumps(obj, cls=MongoEncoder)

它使用
to_json()
方法,作为对上述内容的响应添加。

Sweet。知道有没有办法通过pip安装mongoengine 0.8?看起来他们只有0.7.7:(还没有到0.8还不稳定,在开发过程中调用_json()会执行_mongo()(这会创建您想要的字典)然后序列化它,然后反序列化它,这是相当低效的。我认为更好的方法是使用它,因为它提供了一个有序的字典,然后用str值替换id。无论如何,感谢代码,因为它引导了我正确的方向!