json.dumps vs flask.jsonify

我不确定我了解flask.jsonify方法的用途。 我尝试从这个jsonstring:

 data = {"id": str(album.id), "title": album.title} 

但是我得到的json.dumpsjson.dumps不同。

 json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}] flask.jsonify(data): {"id":…, "title":…} 

显然我需要得到更像是什么json.dumps返回的结果。 我究竟做错了什么?

jsonify()函数返回已经具有合适的内容types头“application / json”的flask.Response()对象用于json响应,而json.dumps()将返回一个编码的string,需要手动添加MIMEtypes标题。

请参阅有关jsonify()函数的更多信息以获取完整参考。

编辑:另外,我注意到, jsonify()处理kwargs或字典,而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模块是simplejsonjson的顺序。 current_app是引用Flask()对象,即您的应用程序。 response_class()是对Response()类的引用。

一个或另一个的select取决于你打算做什么。 从我的理解来看:

  • 当你创build一个有人会查询和期待json的API时, jsonify会很有用。 例如:REST github API可以使用这个方法来回答你的请求。

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