PyMongo和Flask的Jsonify包含转义斜杠

时间:2013-11-25 22:12:50

标签: python json mongodb flask pymongo

我正在尝试使用Mongodb集合中的Flask做出回应:

@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\"}}"
   ]
}

有没有办法使用单引号对此进行编码,因此它不会添加转义字符串?或者有什么我在忽视

1 个答案:

答案 0 :(得分:7)

您正在编码两次

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

resp = jsonify(data=json_docs)

现在json_docs中的每个条目都是一个表示JSON对象的字符串。

删除json.dumps()电话:

resp = jsonify(data=stories)

或将flask.json.dump()Response()

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

这使您可以在游标对象上使用json_util.default处理程序。