JSON序列化Mongodb

Roc*_*nce 19 python mongodb pymongo rpython

我使用python包pymongo从mongodb数据库中检索数据.

>>> r = collection.find()   # returns an object of class 'Cursor'
Run Code Online (Sandbox Code Playgroud)

然后我转换成一个列表

>>> l = list(r)             # returns a 'list' of 'dict'
Run Code Online (Sandbox Code Playgroud)

这是print(l)返回的内容:

>>> [{u'date': datetime.datetime(2009, 11, 10, 10, 45), u'_id': 1, u'name': u'name1', u'value': 11},{u'date': datetime.datetime(2013, 11, 10, 10, 45), u'_id': 2, u'name': u'name2', u'value': 22}]
Run Code Online (Sandbox Code Playgroud)

现在我需要转换为JSON,以便我可以操作它.

>>> json.dumps(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2009, 11, 12, 11, 14) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我也试图关注http://api.mongodb.org/python/1.7/api/pymongo/json_util.html但没有成功:编辑:最新版本的链接是http://api.mongodb.org/python /current/api/bson/json_util.html

>>> json.dumps(l, default=json_util.default)  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
NameError: name 'json_util' is not defined  
Run Code Online (Sandbox Code Playgroud)

注意:我需要使用R包rPython及其函数rPython :: python.get("l")将此结果推送到R

旁边问题:在dict列表中的每个字段之前,你(u'Date',u'name'等等)是什么?

Raf*_*afa 49

你指出的pymongo文档已经过时了.如果您使用的是1.7版,我建议您更新.使用更新版本,您可以执行此操作:

from bson.json_util import dumps

dumps(l)
Run Code Online (Sandbox Code Playgroud)

http://api.mongodb.org/python/current/api/bson/json_util.html

侧回答:u'name',u'date',u'_id'等都是对数据库文件的字段的名称.


Dhr*_*hak 12

from bson import json_util



json.dumps(result,default=json_util.default)
Run Code Online (Sandbox Code Playgroud)