这是后端django发送的数据,xml_list是数组,里面存的字符串,数组里面的字符串可能存在不定个数的单引号或者双引号
data={
'status':200,
'filename': file_name,
'appid':appid,
'key':appidkey,
'from':myfrom,
'to':to,
'text_list':xml_list,
}
return render(request,"transprocess.html",{'data':json.dumps(data),"trans_count": trans_count})
前端接收
var d = '{{ data | safe}}';
// console.log(JSON.parse(d));
data = JSON.parse(d);
在这里就报错了,没法解析
text_list只截取了一个内容,这一个内容出现了两个“” "11011.",然后就报错了
{"status": 200, "filename": "p111-book-huangbin__katsunari-okamoto-fundamentals_of_op_74-175_30-59_1-5-auto-zh.docx", "appid": "20210106000664590", "key": "lBy1rXG61iBcVfiIEsNd", "from": "auto", "to": "zh", "text_list": ["Figure Several pulse waveforms with PCM code of "11011." (a) Input pulse waveform, (b) output pulse waveform after of the fiber with , and (c) output pulse after propagation."]}
我尝试在后端把额外的“”变为中文的,这样虽然部分可以,但是还有其它问题,并不是个好方案,列表内容在python里面没问题,存在不定个数的单引号双引号,在js解析就会出问题
能拿到所有的数据就行了
明白了,由于d是字符串,发到客户端后\"是在的,但是对于js而言由于字符串扩起的的是单引号
实际对\"转义无效,还是一个双引号,应该转成\\"这种格式,对\双转义。
有2种解决办法,推荐第二种
1)在后台替换下,一个\变为2个\,但是会有bug如果内容包含单引号的话会导致前端js变量d字符串不闭合出错
return render(request,"transprocess.html",{'data':json.dumps(data).replace('\\','\\\\'),"trans_count": trans_count})
2,不需要替换,去掉前端d变量字符串引号,这样d直接为对象,不需要JSON.parse,这个也没有第一种的bug问题。
<script>
var d = {{ data | safe}};//可以直接输出内容到script块,这样d就是json对象,不需要再parse
</script>
有帮助麻烦点下【采纳该答案】,谢谢~~有其他问题可以继续交流~