python – PyMongo和Flask的Jsonify包含转义斜杠

我正在尝试使用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\"}}"
   ]
}

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

解决方法:

你编码两次:

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)

或者使用带有Response()的flask.json.dump():

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

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

上一篇:python – 使用collection.find()在pymongo中嵌套查询


下一篇:python – Pymongo BSON二进制保存和检索?