【发布时间】:2021-04-17 19:31:55
【问题描述】:
我有一个 Flask 应用程序,我在其中将字典作为参数传递给我正在呈现的 HTML 页面:
@app.route('/cyto')
def testfn():
nodes={
"nodes": [
{
"data": {"id": "a", "label": "Gene1"}
},
{
"data": {"id": "b", "label": "Gene2"}
},
{
"data": {"id": "c", "label": "Gene3"}
},
{
"data": {"id": "d", "label": "Gene4"}
},
{
"data": {"id": "e", "label": "Gene5"}
},
{
"data": {"id": "f", "label": "Gene6"}
}
],
"edges": [
{
"data": {
"id": "ab",
"source": "a",
"target": "b"
}
},
{
"data": {
"id": "cd",
"source": "c",
"target": "d"
}
},
{
"data": {
"id": "ef",
"source": "e",
"target": "f"
}
},
{
"data": {
"id": "ac",
"source": "a",
"target": "d"
}
},
{
"data": {
"id": "be",
"source": "b",
"target": "e"
}
}]
}
nodes=json.dumps(nodes, ensure_ascii=False)
return render_template("cytoscape_result.html", nodes=nodes)
这是 cytoscape_result.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.18.2/cytoscape.min.js"></script>
<title>Result</title>
</head>
<body>
<script>
JSON.parse({{ nodes }})
</script>
</body>
</html>
但是,JSON.parse({{ nodes }}) 会抛出这个错误:
未捕获的 SyntaxError:预期的属性名称,得到 '&'
当我检查导致错误的行时,它看起来像:
JSON.parse({"nodes": [{"data": {"id": "a", ...
我认为问题在于 JSON.parse 将字典条目周围的双引号解释为 ascii 代码,而不是实际的双引号。如何告诉 JSON.parse 将它们解释为双引号?我尝试在 json.dumps 中设置 ensure_ascii=False,但仍然出现错误。
【问题讨论】: