2014-09-09 2 views
2

pymongo에서 직접 가져온 bson 데이터를 json 데이터로 변환하려고합니다. pymongo 또는 다른 것을 사용하여 파이썬으로 이것을 수행하는 직접적인 방법이 있습니까? 도움이된다면bson을 python/pymongo에서 json으로 변환

여기에 코드입니다 :

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

이 코드의 동작은 사용자가 의도 한 것과 어떻게 다릅니 까? JSON으로 변환하려는'data' 변수의 유형은 정확히 무엇입니까? 우리는'collection.save'가 [이 PyMongo API 호출] (http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.save)을 가리키고 있다고 가정 할 것인가? 또는 다른 것? –

+0

데이터가 pymongo 커서 객체로 반환됩니다. 이 객체를 반복 할 때 반환되는 데이터는 JSON과 호환되지 않는 것들을 포함하는 bson 형식입니다. 그 데이터 변수가 bson 대신 json을 반환하거나 가능한 경우 변환하도록합니다. –

+1

PyMongo의 [''json_util'] 모듈을 보았습니까? (http://api.mongodb.org/python/current/api/bson/json_util.html)이 문제를 해결하는 것으로 보입니까? "json과의 명시적인 BSON 변환 제공" –

답변

3

..., 그것은 나타납니다 가장 좋은 방법은 Python의 json_util module을 사용하여 BSON을 JSON으로 변환하는 데 대한 자세한 내용을 처리하는 것입니다.