2014-09-09 2 views
2

Я пытаюсь преобразовать данные bson, полученные прямо из pymongo в json-данные. Есть ли прямой способ сделать это с помощью python, используя pymongo или что-то еще?Преобразование bson в json в python/pymongo

Вот код, если это помогает:

def email_main(request): 
    collection = get_collection("nimbus").fullcontact_email_data 
    if request.method == "POST": 
     data = collection.save(dict(request.POST.iterlists())) 
     response = HttpResponse(data, content_type="application/json") 
    elif request.method == "GET": 
     getParams = convertQuerydictToDict(request.GET) 
     page, itemsPerPage = getPageDataFromDict(getParams) 
     getParamsWithNoPageData = createDictWithoutPageData(getParams) 
     data = collection.find(getParamsWithNoPageData)[page:page+itemsPerPage+1] 
     response = HttpResponse(data, content_type="application/json") 
    else: 
     response = HttpResponse(status=404) 
    return response 


def convertQuerydictToDict(queryDict): 
    return dict(queryDict.iterlists()) 


def getPageDataFromDict(myDict): 
    if "page" in myDict and "itemsPerPage" in myDict: 
     page, itemsPerPage = myDict["page"], myDict['itemsPerPage'] 
    elif "page" in myDict: 
     page, itemsPerPage = myDict["page"], 10 
    else: 
     page, itemsPerPage = 0, 10 
    return page, itemsPerPage 

def createDictWithoutPageData(myDict): 
    newDict = deepcopy(myDict) 
    newDict.pop("page", None) 
    newDict.pop("itemsPerPage", None) 
    return newDict 

в основном переменные данные должен заводятся в правильный формат JSON. Должно быть какое-то встроенное, что делает это.

Для ясности здесь то, что я получаю, когда я поместить данные в питона консоли:

>>> data 
<pymongo.cursor.Cursor object at 0x4dd0f50> 
>>> data[0] 
{u'blah': u'go', u'_id': ObjectId('540e3fd8bb6933764d5650b7')} 

ObjectId не является частью спецификации JSon ...

+0

Как поведение этого кода отличается от того, что вы намерены? Что такое тип переменной 'data', которую вы хотите преобразовать в JSON? Можно ли предположить, что 'collection.save' ссылается на [этот вызов API PyMongo] (http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.save), или что-то другое? –

+0

данные возвращаются как объект курсора pymongo. Когда вы перебираете этот объект, данные возвращаются в формате bson, который включает в себя вещи, которые не совместимы с JSON. Я просто хочу, чтобы переменная данных возвращала json, а не bson, или, если это возможно, преобразовать. –

+1

Вы посмотрели модуль ['json_util' в PyMongo] (http://api.mongodb.org/python/current/api/bson/json_util.html), который, похоже, решает эту проблему? «обеспечивают явное преобразование BSON в и из json» –

ответ

3

Как обсуждалось в предыдущих комментариях, по-видимому что наилучшим подходом является использование PyMongo's json_util module для обработки подробных сведений о преобразовании BSON в JSON.

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