You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将提取的API数据以JSON格式返回至模板?

解决返回JSON格式而非字符串的问题

看起来你遇到的核心问题是对JsonResponse的用法理解有点偏差,咱们一步步来修正:

先分析你两种尝试的问题

  1. 第一种代码的问题:
    你用json.dumps(response)把Python列表转换成了JSON字符串,然后把这个字符串传给JsonResponse。这会导致JsonResponse把这个字符串当作普通值再封装一次,最终返回的响应是一个包含该字符串的JSON(比如"[{...}]"),而不是你想要的原生JSON数组。

    # 错误示例
    response = response.json() 
    response = response['data'] 
    return JsonResponse(json.dumps(response),safe=False)  # 多做了一次序列化
    
  2. 第二种代码其实是正确的(可能你误解了返回结果):
    当你把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:26:30