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
相关产品推荐
相关产品推荐

