json.dumps vs flask.jsonify

时间:2011-10-26 19:06:29

标签: python json flask

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

5 个答案:

答案 0 :(得分:294)

flask中的jsonify()函数返回一个flask.Response()对象,该对象已经具有相应的内容类型标题'application / json',以便与json响应一起使用。然而,json.dumps()方法只返回一个编码字符串,这需要手动添加MIME类型标题。

详细了解jsonify()函数here以供完整参考。

编辑: 另外,我注意到jsonify()处理kwargs或词典,而json.dumps()另外支持列表和其他。

答案 1 :(得分:84)

你可以这样做:

flask.jsonify(**data)

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

答案 2 :(得分:68)

这是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()类的引用。

答案 3 :(得分:28)

选择一个或另一个取决于您打算做什么。 据我所知:

  • jsonify 在构建有人会查询并期望json作为回报的API时非常有用。例如:REST github API可以使用此方法来回答您的请求。

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

答案 4 :(得分:0)

考虑

data={'fld':'hello'}

现在

jsonify(data)

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

json.dumps(data)

给予

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