将pymongo光标转换为json

Posted

技术标签:

【中文标题】将pymongo光标转换为json【英文标题】:convert pymongo cursor to json 【发布时间】:2012-10-25 20:46:26 【问题描述】: 我知道这是一个相当普遍的问题。我正在编写一个小型 Flask 应用程序,并试图将一些查询反馈给视图。 我已连接到本地 MongoDB 设置,并进行了成功查询 - 但我无法使用它生成 json 对象。

我见过的最常见的解决方案是从 pymongo 导入 json_util,即

import json
from pymongo import json_util

results = connection.get_collection('papayas_papaya')
results = results.find(
    'identifier': '1',
)
serialized_results = [json.dumps(result, default=json_util.default, separators=(',', ':')) for result in results]

我已经使用 pip 将 pymongo 安装到我的 Flask virtualenv 中,即:

pip install pymongo

运行上述代码时,我不断收到以下错误:

ImportError: cannot import name json_util

我可以在 pymongo-2.3-py2.6.egg-info/installed-files.txt 中看到这一行 ../bson/json_util.py

任何人有任何提示可以帮助我找出我做错了什么?

更新: 对此进行了进一步讨论 - 我已经设法让这个工作:

import pymongo
from bson.json_util import dumps

connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs

def get():
    cursor = db.foo.find("name" : "bar")
    return dumps(cursor)

我遇到的一个问题是尝试独立 pip install bson - pymongo 自带 bson,单独导入 bson 会导致问题。

感谢@Cagex 为我指明了正确的方向

【问题讨论】:

永远不要“pip install bson”,那是别人的过时模块。只有“pip install pymongo”才能获得官方的pymongo、bson和gridfs模块。 【参考方案1】:

看起来您想从 bson 而不是 pymongo 导入。我相信 json_util 最近已移至该模块。 https://pymongo.readthedocs.io/en/stable/api/bson/json_util.html

【讨论】:

网址无效 202111005【参考方案2】:

您可以使用 list() 将 pymongo 光标转换为 json 对象。

import pymongo
from bson.json_util import dumps
from bson.json_util import loads

connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs

def get():
   cursor = list(db.foo.find("name" : "bar"))
   return loads(dumps(cursor))

【讨论】:

【参考方案3】:

我看过很多关于这个问题的帖子,但他们没有为我解决这个问题。对我有用的是使用 dumps(),然后是 loads()

import pymongo
from bson.json_util import dumps
from bson.json_util import loads

connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs

def get():
    cursor = db.foo.find("name" : "bar")
    return loads(dumps(cursor))

【讨论】:

这只会打印标题而不是值

以上是关于将pymongo光标转换为json的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将光标列表转换为JSON格式?

PyMongo 光标迭代

如何将 pymongo.cursor.Cursor 转换为字典?

在 python/pymongo 中将 bson 转换为 json

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

pymongo 光标“触摸”以避免超时