2013-11-25 4 views
3

가 나는 MongoDB를 수집에서 플라스크를 사용하여 응답을 만들기 위해 노력하고있어 슬래시를 포함PyMongo와 플라스의 Jsonify 탈출이

@app.route('/stories', methods = ['GET']) 
def get_stories(): 
    stories = db.stories.find() 

    json_docs = [json.dumps(doc, default=json_util.default) for doc in stories] 

    resp = jsonify(data=json_docs) 
    resp.status_code = 200 

    return make_response(resp) 

이 모든 항목을 가져오고 JSON 응답으로 인코딩하지만 다음과 같습니다 :

{ 
"data": [ 
    "{\"content\": \"some story here\", \"_id\": {\"$oid\": \"5293c34431e20307544db9cb\"}}", 
    "{\"content\": \"some story here\", \"_id\": {\"$oid\": \"5293c34d31e20307584c3e6e\"}}", 
    "{\"content\": \"some story here\", \"_id\": {\"$oid\": \"5293c57d31e20307a7b40abe\"}}" 
    ] 
} 

작은 따옴표를 사용하여 이스케이프 문자열을 추가하지 않도록 인코딩 할 수 있습니까?

json_docs = [json.dumps(doc, default=json_util.default) for doc in stories] 

resp = jsonify(data=json_docs) 

지금 json_docs의 각 항목은 JSON 개체를 나타내는 문자열입니다 아니면이 두 번 을 인코딩하는

답변

7

내려다 보이는 해요 뭔가가있다.

json.dumps() 호출을 제거

resp = jsonify(data=stories) 

또는 Response()flask.json.dump()를 사용 :이 여전히 객체 커서에 json_util.default 핸들러를 사용할 수 있습니다

resp = Response(json.dumps({'data': stories}, default=json_util.default), 
       mimetype='application/json') 

.

+0

내가 이것을 시도했을 때, 그것은'Cursor JSON serializable not type '에러를 준다. 나는 꽤 확신한다. ObjectID와 관련이있다. 그걸 json으로 변환하는 방법을 알고 싶습니까? – Chris

+0

@Chris :'jsonify()'는'default' 핸들러를 지정할 수 없으므로'Json.dumps()'의 반환 값으로 직접'Response()'객체를 직접 만들고 싶습니다. –

+0

고마워, 지금 이걸 이해해. :) – Chris

관련 문제