【问题标题】:Flask: How to convert a python dictionary to JSON?Flask:如何将 python 字典转换为 JSON?
【发布时间】: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({&#34;nodes&#34;: [{&#34;data&#34;: {&#34;id&#34;: &#34;a&#34;, ...

我认为问题在于 JSON.parse 将字典条目周围的双引号解释为 ascii 代码,而不是实际的双引号。如何告诉 JSON.parse 将它们解释为双引号?我尝试在 json.dumps 中设置 ensure_ascii=False,但仍然出现错误。

【问题讨论】:

    标签: python json flask


    【解决方案1】:

    将 dict 传递给 jinja 模板并使用 tojson 过滤器将其转换为 JSON。

    @app.route('/cyto')
    def testfn():
        nodes={
            "nodes": [
                # ...
            ],
            "edges": [
                # ...
            ]
        }
        return render_template('cytoscape_result.html', nodes=nodes)
    
    <script>
    const data = {{ nodes | tojson }};
    console.log(data);
    </script>
    

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2013-02-14
      • 2023-03-14
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2018-05-04
      相关资源
      最近更新 更多