PyMongo 和 Flask 的 Jsonify 包含转义斜线
Posted
技术标签:
【中文标题】PyMongo 和 Flask 的 Jsonify 包含转义斜线【英文标题】:PyMongo and Flask's Jsonify contains escape slashes 【发布时间】:2013-12-10 20:25:33 【问题描述】:我正在尝试使用 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】:您正在编码两次:
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
处理程序。
【讨论】:
当我尝试这个时,它给了我一个Cursor not JSON serializable
类型错误。我很确定这与 ObjectID 有关。知道如何将其转换为 json 吗?
@Chris: 更新了,jsonify()
不会让你指定default
处理程序,所以你想自己构造Response()
对象,返回值为json.dumps()
。
非常感谢,我现在明白了:)以上是关于PyMongo 和 Flask 的 Jsonify 包含转义斜线的主要内容,如果未能解决你的问题,请参考以下文章
在flask中使用jsonify和json.dumps的区别
Flask 学习-88. jsonify() 函数源码解读深入学习