我不确定我理解flask.jsonify
方法的目的。我试着做一个JSON字符串从这个:
data = {"id": str(album.id), "title": album.title}
但是我用json.dumps
得到的和我用flask.jsonify
得到的不一样。
json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}]
flask.jsonify(data): {"id":…, "title":…}
显然,我需要得到一个结果,看起来更像什么json.dumps
返回。我做错了什么?
flask中的jsonify()
函数返回一个flask.Response()
对象,该对象已经具有用于json响应的适当内容类型头'application/json'。然而,json.dumps()
方法将只返回一个编码字符串,这将需要手动添加MIME类型头。
查看jsonify()
函数的更多信息,请点击此处获取完整参考。
编辑:另外,我注意到jsonify()
可以处理字符串或字典,而json.dumps()
还支持列表等。
你可以这样做:
flask.jsonify(**data)
或
flask.jsonify(id=str(album.id), title=album.title)
这是flask.jsonify()
def jsonify(*args, **kwargs):
if __debug__:
_assert_have_json()
return current_app.response_class(json.dumps(dict(*args, **kwargs),
indent=None if request.is_xhr else 2), mimetype='application/json')
所使用的json
模块依次为simplejson
或json
。current_app
是对Flask()
对象(即您的应用程序)的引用。response_class()
是对Response()
类的引用
选择一个还是另一个取决于您打算做什么。据我所知:
-
jsonify将是有用的,当你正在构建一个API有人会查询和期望json返回。例如:REST github API可以使用这个方法来回答你的请求。
-
转储,更多的是关于将数据/python对象格式化为json并在应用程序中处理它。例如,我需要传递一个对象到我的表示层,其中一些javascript将显示图形。
考虑
data={'fld':'hello'}
现在jsonify(data)
将生成{' field ':'hello'}和
json.dumps(data)
为
"<html><body><p>{'fld':'hello'}</p></body></html>"