json。转储vs flask.jsonify

我不确定我理解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返回的结果。我做错了什么?

403455 次浏览

你可以:

flask.jsonify(**data)

flask.jsonify(id=str(album.id), title=album.title)

flask中的jsonify()函数返回一个flask.Response()对象,该对象已经具有适当的内容类型头'application/json',可用于json响应。然而,json.dumps()方法将只返回一个编码的字符串,这将需要手动添加MIME类型头。

详细参考jsonify()函数在这里

< p >编辑: 此外,我还注意到jsonify()处理kwarg或字典,而json.dumps()额外支持列表和其他

这是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模块依次为simplejsonjsoncurrent_app是对Flask()对象的引用,即你的应用程序。response_class()Response()类的引用。

选择一个还是另一个取决于你打算做什么。 据我所知:

  • jsonify在你构建API时很有用,有人会查询并期望返回json。例:REST github API可以使用这个方法来回答你的请求。

  • 转储,更多的是关于将数据/python对象格式化为json,并在应用程序中对其进行处理。例如,我需要传递一个对象到我的表示层,其中一些javascript将显示图形。您将为javascript提供转储生成的Json。

考虑

data={'fld':'hello'}

现在

jsonify(data)

将产生{'fld':'hello'}和

json.dumps(data)

给了

"<html><body><p>{'fld':'hello'}</p></body></html>"