我不太明白这个烧瓶的用途。jsonify方法。我尝试从这个JSON字符串:

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

而是json得到的。dump不同于我得到的flask.jsonify。

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

显然,我需要得到一个看起来更像json的结果。转储的回报。我做错了什么?


当前回答

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

其他回答

你可以:

flask.jsonify(**data)

or

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

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

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

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

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

当你构建一个API时,有人会查询并期望返回json, jsonify将是有用的。例:REST github API可以使用这个方法来回答你的请求。 转储,更多的是关于将数据/python对象格式化为json,并在应用程序中对其进行处理。例如,我需要传递一个对象到我的表示层,其中一些javascript将显示图形。您将为javascript提供转储生成的Json。

考虑

data={'fld':'hello'}

now

jsonify(data)

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

json.dumps(data)

给了

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