簡體   English   中英

json.dumps 與flask.jsonify

[英]json.dumps 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返回的結果。 我究竟做錯了什么?

jsonify()函數返回一個flask.Response()對象,該對象已經具有適當的內容類型標頭 'application/json' 用於 json 響應。 json.dumps()方法只會返回一個編碼字符串,這需要手動添加 MIME 類型標頭。

在此處查看有關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模塊simplejson順序是simplejsonjson current_app是對Flask()對象的引用,即您的應用程序。 response_class()是對Response()類的引用。

選擇一個或另一個取決於您打算做什么。 根據我的理解:

  • 當您構建 API 時, jsonify會很有用,有人會查詢並期望 json 作為回報。 例如:REST github API 可以使用此方法來回答您的請求。

  • dumps ,更多是關於將數據/python 對象格式化為 json 並在您的應用程序中處理它。 例如,我需要將一個對象傳遞給我的表示層,其中一些 javascript 將顯示圖形。 您將使用轉儲生成的 Json 提供 javascript。

考慮

data={'fld':'hello'}

現在

jsonify(data)

將產生 {'fld':'hello'} 和

json.dumps(data)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM