Подтвердить что ты не робот

JSON-сериализация Mongodb

Я использую python-пакет pymongo для извлечения данных из базы данных mongodb.

>>> r = collection.find()   # returns an object of class 'Cursor'

Затем я конвертирую в список

>>> l = list(r)             # returns a 'list' of 'dict'

вот что возвращает 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}]

Теперь мне нужно преобразовать в 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

Я также старался следовать 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  

Примечание.. Мне нужно нажать этот результат на R с помощью R-пакета rPython и его функции rPython:: python.get( "l" )

Боковой вопрос: что такое u (u'Date ', u'name' и т.д.) перед каждым полем в списке dict?

4b9b3361

Ответ 1

Указанная документация pymongo устарела. Если вы используете версию 1.7, я рекомендую обновить ее. С помощью более новой версии вы можете сделать это:

from bson.json_util import dumps

dumps(l)

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

Боковой ответ: u'name', u'date', u'_id' и т.д. - это имена полей документа в базе данных.

Ответ 2

from bson import json_util



json.dumps(result,default=json_util.default)