2012-04-16 4 views
4

Попытка сериализовать курсор MongoDB в DjangoДжанго MongoDB двигателя DebugCursor "не JSON сериализации"

import json 
from pymongo import json_util 

results = json.dumps(results, default=json_util.default, separators=(',', ':')) 

Где оригинал results что-то вроде

[{u'_id': ObjectId('4f7c0f34705ff8294a00006f'), 
    u'identifier': u'1', 
    u'items': [{u'amount': 9.99, u'name': u'PapayaWhip', u'quantity': 1}], 
    u'location': None, 
    u'timestamp': datetime.datetime(2012, 4, 4, 10, 7, 0, 596000), 
    u'total': 141.25}] 

Редактировать: получен с помощью что-то вроде

from django.db import connections 

connection = connections['default'] 

results = connection.get_collection('papayas_papaya') 
results = results.find({ 
    'identifier': '1', 
}) 

дает мне

TypeError: <django_mongodb_engine.utils.DebugCursor object> is not JSON serializable 

Кто-нибудь знает, что я делаю неправильно?

Использование json_util должен сериализовать MongoDB документы, может быть, мой вопрос заключается в том, что я пытаюсь serliaze в курсор. (Как получить документ с помощью курсора? Простой кортеж «литой»?)

Cheers!

+0

Для того, чтобы помочь вам, нам нужно хотя бы увидеть, какой код вы используете для получения результата. –

+0

@NolenRoyalty Я уже показал, как выглядит «результат»; для его получения я использовал обычный запрос PyMongo. В любом случае, я обновил вопрос :-) – user1336024

ответ

5

Вы пытаетесь сериализовать только один фрагмент данных? Если это так, просто измените

results = results.find({ 
    'identifier': '1', 
}) 

в

results = results.find_one({ 
    'identifier': '1', 
}) 

(Хотя вы действительно должны делать различие между вашими результатами и переменной, представляющей свою коллекцию.)

Если вы пытаетесь сериализации множественным фрагменты данных, вы можете сохранить find, а затем перебрать курсор и сериализовать каждую часть данных.

serialized_results = [json.dumps(result, default=json_util.default, separators=(',', ':')) for result in results] 
+0

Закончилось переключение курсора на кортеж и JSON-демпинг. Спасибо за вашу помощь :-) – user1336024

0

Вы действительно должны использовать систему сериализации Джанго или подключаемое приложение JSON-сериализацию, по крайней мере.

Смежные вопросы