Я пытаюсь преобразовать данные 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 ...
Как поведение этого кода отличается от того, что вы намерены? Что такое тип переменной 'data', которую вы хотите преобразовать в JSON? Можно ли предположить, что 'collection.save' ссылается на [этот вызов API PyMongo] (http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.save), или что-то другое? –
данные возвращаются как объект курсора pymongo. Когда вы перебираете этот объект, данные возвращаются в формате bson, который включает в себя вещи, которые не совместимы с JSON. Я просто хочу, чтобы переменная данных возвращала json, а не bson, или, если это возможно, преобразовать. –
Вы посмотрели модуль ['json_util' в PyMongo] (http://api.mongodb.org/python/current/api/bson/json_util.html), который, похоже, решает эту проблему? «обеспечивают явное преобразование BSON в и из json» –