gpt4 book ai didi

json - 在python中将pymongo查询集序列化为json

转载 作者:可可西里 更新时间:2023-11-01 09:52:21 28 4
gpt4 key购买 nike

背景:这符合预期:

>>> queryset = FIRM.find_one({'_id':ObjectId("52e56c009dbc794999ea5c3d")},{'wholesalers.name':1,'wholesalers.id':1,'_id':0}) 
>>> simplejson.dumps(queryset,default = json_util.default)
'{"wholesalers": [{"id": {"$oid": "52e56c009dbc794999ea5c3c"}, "name": "wholesaler1"}]}'

但是这不是

>>> queryset = FIRM.find({'_id':ObjectId("52e56c009dbc794999ea5c3d")},{'wholesalers.name':1,'wholesalers.id':1,'_id':0}) 
>>> simplejson.dumps(queryset,default = json_util.default)


Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/simplejson-3.3.1-py2.7-linux-i686.egg/simplejson/__init__.py", line 369, in dumps
**kw).encode(obj)
File "/usr/local/lib/python2.7/dist-packages/simplejson-3.3.1-py2.7-linux-i686.egg/simplejson/encoder.py", line 262, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python2.7/dist-packages/simplejson-3.3.1-py2.7-linux-i686.egg/simplejson/encoder.py", line 340, in iterencode
return _iterencode(o, 0)
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.6.3-py2.7-linux-i686.egg/bson/json_util.py", line 220, in default
raise TypeError("%r is not JSON serializable" % obj)
TypeError: <pymongo.cursor.Cursor object at 0x109774ac> is not JSON serializable

我想将queryset序列化为json

最佳答案

在第一个片段中,您分配给变量 queryset 的对象是一个(单个)文档(find_one 返回一个文档)。 IE。从数据库中获取一个文档,并存储在内存中。文档是 json 序列化的,因此它可以工作。

在第二个片段中,您分配给 queryset 的对象是一个 Cursor .生成的文档尚未获取,它们仅在您遍历游标时才获取。 Cursor 不是 json 序列化的,因为它不代表文档,而是结果文档的生成器。所以你可以做的是先获取所有文档,然后序列化文档列表:

>>> queryset = FIRM.find({'_id':ObjectId("52e56c009dbc794999ea5c3d")},{'wholesalers.name':1,'wholesalers.id':1,'_id':0}) 
>>> docs = list(queryset) # fetch the documents
>>> simplejson.dumps(documents, default = json_util.default)

关于json - 在python中将pymongo查询集序列化为json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com