Django中如何将提取的API数据以JSON格式返回至模板?
解决返回JSON格式而非字符串的问题
看起来你遇到的核心问题是对JsonResponse的用法理解有点偏差,咱们一步步来修正:
先分析你两种尝试的问题
第一种代码的问题:
你用json.dumps(response)把Python列表转换成了JSON字符串,然后把这个字符串传给JsonResponse。这会导致JsonResponse把这个字符串当作普通值再封装一次,最终返回的响应是一个包含该字符串的JSON(比如"[{...}]"),而不是你想要的原生JSON数组。# 错误示例 response = response.json() response = response['data'] return JsonResponse(json.dumps(response),safe=False) # 多做了一次序列化第二种代码其实是正确的(可能你误解了返回结果):
当你把response['data'](一个Python列表)传给JsonResponse并设置safe=False时,JsonResponse会自动把这个列表序列化成JSON数组,并且设置正确的Content-Type: application/json响应头。你看到的“字符串形式”可能是在浏览器查看响应时的显示方式,或者前端处理时的误解——实际上这个响应已经是标准的JSON格式了。
正确的实现方式
首先建议你避免变量名冲突(比如不要用同一个response变量既存请求响应又存解析后的数据),代码可以写成这样:
import requests from django.http import JsonResponse def your_target_view(request): # 1. 请求第一个API获取数据 api_response = requests.get("你的第一个API端点URL") api_response.raise_for_status() # 处理请求失败的情况 # 2. 解析JSON并提取需要的data字段 parsed_data = api_response.json() extracted_data = parsed_data['data'] # 3. 返回原生JSON响应 return JsonResponse(extracted_data, safe=False)
如果已经有字符串格式的JSON,怎么返回?
如果你手里已经是一个JSON字符串(比如不小心用json.dumps生成的),可以先把它转回Python对象,再用JsonResponse返回:
import json from django.http import JsonResponse def your_view(request): # 假设你已经有了字符串格式的JSON json_string = '[{"d": {"e": "some data", "f": "some data"}}]' python_obj = json.loads(json_string) return JsonResponse(python_obj, safe=False)
或者你也可以直接用HttpResponse手动设置响应头返回字符串:
from django.http import HttpResponse def your_view(request): json_string = '[{"d": {"e": "some data", "f": "some data"}}]' return HttpResponse(json_string, content_type="application/json")
不过更推荐用JsonResponse,它会帮你处理序列化细节和响应头,更符合Django的最佳实践。
内容的提问来源于stack exchange,提问作者Sapna Sharma
相关产品推荐
相关产品推荐

