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

JavaScript无法解析JSON字符串:Django视图传参至前端问题

解决Django视图传递JSON到前端无法解析的问题

我来帮你搞定这个JSON解析的坑!你遇到的问题大概率是Django模板自动转义搞的鬼——当你把序列化后的JSON字符串通过模板传到前端时,Django会自动把JSON里的特殊字符(比如双引号")转成HTML实体(比如"),导致前端拿到的根本不是有效的JSON格式,自然解析失败。

最简单的解决方案:关闭模板转义

在你的index.html里,给jsondata加上|safe过滤器,告诉Django不要转义这个内容:

// 直接在JS里这样写,拿到的就是现成的JS对象数组
var jsonData = {{ jsondata|safe }};

这样处理后,前端拿到的就是原始的JSON结构,甚至不需要再调用JSON.parse(),因为它已经是一个可以直接使用的JavaScript对象数组了。

为什么会出现这个问题?

你可以打开浏览器开发者工具查看页面源码,如果看到输出的内容是类似这样的:

var jsonData = [{"model": "posts.feed", "pk": 1, ...}];

那就是转义在作祟——这些"是HTML转义后的双引号,JSON解析器根本不认。

备选方案:用JsonResponse直接返回API(适合纯数据场景)

如果你的场景不需要同时渲染页面模板,只是需要给前端返回JSON数据,可以直接用Django的JsonResponse:

from django.http import JsonResponse
from django.core import serializers

def feed_api(request):
    results = feed.objects.all()
    # 序列化后转成Python列表,这样JsonResponse可以直接处理
    serialized_data = serializers.serialize('python', results)
    return JsonResponse(serialized_data, safe=False)

然后前端用fetch或者axios请求这个接口:

fetch('/feed-api/')
  .then(response => response.json())
  .then(data => {
    console.log(data);
    // 这里直接拿到解析好的JSON数据
  });

这种方式完全避开了模板转义的问题,适合前后端分离的场景。

验证小技巧

修改完代码后,记得在浏览器里查看页面源码,确认输出的JSON字符串里的双引号是正常的"而不是",这样就说明转义问题解决了。

试试上面的方法,应该就能顺利解析JSON啦!

内容的提问来源于stack exchange,提问作者Scorpionk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:54