Django 是一個基于 Python 的 Web 框架,其中一個重要的功能是返回 JSON 數據。在 Django 中,可以使用 JsonResponse 類來返回 JSON 數據,該類是從 HttpResponse 類繼承而來的。
使用 JsonResponse 返回 JSON 數據需要先將 Python 對象轉換成 JSON 字符串,這可以通過內置的 json 模塊來完成。下面是一個簡單的例子:
import json from django.http import JsonResponse def my_view(request): my_dict = {'foo': 'bar'} return JsonResponse(my_dict)
在這個例子中,我們將字典對象 my_dict 轉換成 JSON 字符串,然后將其作為參數傳遞給 JsonResponse 構造函數,最終返回的是一個 HTTP 響應,其中包含了 JSON 數據。
除了字典對象,也可以將其它 Python 對象轉換成 JSON 字符串,比如列表、元組等。下面是一個將列表轉換成 JSON 的例子:
my_list = ['foo', {'bar': ('baz', None, 1.0, 2)}] json_data = json.dumps(my_list) return JsonResponse(json_data, safe=False)
需要注意的是,JsonResponse 默認只接受字典對象作為參數,如果傳遞的是其它類型的對象,需要將 safe 參數設置為 False。
對于較大的 JSON 數據,可以使用 StreamingHttpResponse 類來返回數據流,這樣可以減少內存占用。下面是一個使用 StreamingHttpResponse 的例子:
from django.http import StreamingHttpResponse def large_json_view(request): def json_stream(): yield '[\n' for i in range(100000): yield '{"key": %d}' % i if i< 99999: yield ',\n' yield '\n]' return StreamingHttpResponse(json_stream(), content_type="application/json")
在這個例子中,我們通過生成器函數 json_stream 逐行返回 JSON 數據,每次返回一行。由于 StreamingHttpResponse 會在每次迭代中返回一部分數據,因此不需要等待全部數據生成完畢,從而可以減少內存占用。
下一篇c 接受json數組