Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象

Posted

技术标签:

【中文标题】Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象【英文标题】:Pymongo/bson: Convert python.cursor.Cursor object to serializable/JSON object 【发布时间】:2015-07-31 17:37:13 【问题描述】:

MongoDb 和 Python 的新手 (webapp2)。因此,我从 mongodb 数据库中获取了一些数据。但我无法在返回的数据上使用json.dumps。这是我的代码:

exchangedata = db.Stock_Master.find("Country": "PHILIPPINES", "_id" : 0)        
self.response.write(json.dumps(exchangedata)) 

这会引发错误:

TypeError: pymongo.cursor.Cursor object at 0x7fcd51230290 is not JSON serializable

exchangedata 的类型是pymongo.cursor.Cursor。如何将其转换为 json 对象?

【问题讨论】:

相关:***.com/questions/13241878/…. 将光标转换为对象列表:self.response.write(json.dumps(list(exchangedata))) Mongo 返回一个cursor 对象,而不是实际的list 数据。正如 Kyle 所说,您需要先将其转换为 list 不适用于列表包装器。它通过一个空的数据对象发送。 【参考方案1】:

是的,当然你可以使用 bson.json_util 包中的 dumps()。但是, dumps() 会给你引用的结果。要获得清晰的 json 结果,您可以使用以下代码。

clean_json = re.compile('ISODate\(("[^"]+")\)').sub('\\1', 
        dumps(my_db._my_collection.find(query), 
                 json_options=CANONICAL_JSON_OPTIONS))
json_obj = json.loads(clean_json)

【讨论】:

【参考方案2】:

简单的解决方案

 // Use dumps from bson.json_util:
from bson.json_util import dumps

@app.route("/")
def home_page():

    booking = dumps(mongo.db.bookings.find())
    print booking
    return  booking

【讨论】:

【参考方案3】:

使用来自bson.json_util的转储:

>>> c = pymongo.MongoClient()
>>> c.test.test.count()
5
>>> from bson.json_util import dumps
>>> dumps(c.test.test.find())
'["_id": "$oid": "555cb3a7fa5bd85b81d5a624", "_id": "$oid": "555cb3a7fa5bd85b81d5a625", "_id": "$oid": "555cb3a7fa5bd85b81d5a626", "_id": "$oid": "555cb3a7fa5bd85b81d5a627", "_id": "$oid": "555cb3a7fa5bd85b81d5a628"]'

【讨论】:

此解决方案仅适用于非常小的数据集,因为它将光标获取的所有对象转储到单个字符串中。对于更大的数据,它没有帮助,您也可以遍历所有结果并保存它们。 bson 包对于大数据来说真的很糟糕。请改用 bsonjs 包。在大多数情况下,单独转换 ObjectId() 就足够了。 dumps(c.test.test.find(), indent=4) 更好。

以上是关于Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

Pymongo BSON 二进制保存和检索?

python units_cur4.py

python units_cur4_revised.py

将自己的博客园,打造成个人知乎

如何将thinkcmf导入eclipse

如何将Ios文件上传到