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() 函数源码解读深入学习

Flask 中字典数据返回(jsonify)

为啥flask的jsonify方法很慢?

jsonify Flask中的SQLAlchemy结果集[重复]

如何在 Flask 中“jsonify”一个列表? [复制]