将pymongo游标转换为json

时间:2012-11-05 23:09:57

标签: pymongo

  • 我知道这是一个相当普遍的问题。我正在写一个小的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)

我遇到的一个问题是尝试独立安装bson - pymongo带来bson并分别导入bson导致问题。

感谢@Cagex指出我正确的方向

3 个答案:

答案 0 :(得分:13)

看起来你想要从bson而不是pymongo导入。我相信json_util最近被移到了那个模块。 http://api.mongodb.org/python/current/api/bson/json_util.html

答案 1 :(得分:4)

我已经看到很多关于此问题的帖子,但是他们没有为我解决该问题。对我有用的是使用 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))

答案 2 :(得分:1)

您可以使用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))