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

Django向Javascript传递JSON对象异常,求解决方案

问题分析与解决建议

你的问题出在重复序列化JSON上:

  • 视图中已经通过json.dumps(data)将Python字典转换成了JSON字符串
  • 模板里的json_script过滤器本身会对传入的Python对象执行JSON序列化操作

当你把已经序列化好的字符串传给json_script时,它会把这个字符串当作普通文本再次序列化,最终前端拿到的是被转义后的字符串(比如"{\"key\": \"value\"}"),JSON.parse之后得到的是原JSON字符串本身而非预期的对象,因此Object.keys会把字符串的每个字符索引当作键输出。


解决方法(二选一)

方案1:让json_script负责序列化(推荐)

修改视图代码,直接传递Python字典给模板,不再手动执行json.dumps:

def test_json(request):
    data = {'key': 'value'}
    # 直接传递Python字典,不做序列化
    return render(request, 'test_json.html', {'json_data': data}) 

模板代码保持不变即可,json_script会自动将字典序列化为安全的JSON格式输出,前端解析后能得到正确的对象。

方案2:手动序列化时跳过json_script

如果你坚持要在视图中做序列化,模板里直接输出字符串并使用safe过滤器确保不被转义:

<script id="json_data" type="application/json">{{ json_data|safe }}</script>
<script>
  const mydata = JSON.parse(document.getElementById("json_data").textContent);
  const keys = Object.keys(mydata);
  console.log(keys);
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:31:13