首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >酒瓶Jinja2 -解析JSON

酒瓶Jinja2 -解析JSON
EN

Stack Overflow用户
提问于 2018-05-11 12:01:46
回答 4查看 25.6K关注 0票数 3

我正在尝试在Jinja2 HTML模板中显示一些JSON结果,但是它会返回一个空页面,或者返回新行中的每个JSON字符,或者返回每一个带间距的字符。

我要发送给Jinja2模板的对象如下所示:

代码语言:javascript
运行
复制
[
  {
    "name": "John",
     "lastname": "Smith", 
     "age": 22, 
     "likes": [
       {"fruits": 
         ["bananas", "oranges"]
         }, 
       {"sweets": 
         ["chocolate"]
         }
       ]
     }
   ]

要将JSON对象发送到我使用的Jinja2模板:

代码语言:javascript
运行
复制
render_template("report.html", items=items)

在Jinja2模板{{ items }}上,如果我使用{{ items }},它会将完整的对象显示为文本。如果我试图获得{{ items['name'] }},它将不会在页面上显示任何内容,页面将完全为空。

我也试过

代码语言:javascript
运行
复制
{% for x in items %}
{{ x }}
{% endfor %}

而且它只显示相同的“文本”,但使用空格:[ { " n a m e " : "J o h n " [...]

在HTML文件中,我试图执行如下操作:

代码语言:javascript
运行
复制
<div id="name">{{ items['name'] }}</div>

如何在传递给Jinja2的JSON对象中显示对象?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-11 13:38:54

我想我已经结束了。

我必须首先json_dumps对象,然后json.loads新对象。

代码语言:javascript
运行
复制
r = json.dumps(json_onject)
loaded_r = json.loads(r)
return render_template("report.html", items=loaded_r)

现在我可以使用JSON对象中的任何值。

票数 10
EN

Stack Overflow用户

发布于 2020-04-10 20:45:35

我有一个稍微修改过的示例,对我来说效果很好:

app.py:

代码语言:javascript
运行
复制
link_chart_data = {
    "type":
    "LinkChart",
    "items": [{
        "type": "node",
        "id": "ac1",
        "u": "static/icons/bank.png",
        "t": "45081063"
    }]
}

@app.route('/link_chart')
def covid():
    return render_template("link_chart/index.html", flask_data=link_chart_data)

然后在templates/link_ Then /index.html中:

代码语言:javascript
运行
复制
<script>
    const parsedData = JSON.parse('{{ flask_data|tojson }}');
    const unparsedData = '{{ flask_data }}'
    console.log('parsed', parsedData)
    console.log('unparsed', unparsedData)
</script>

产生的结果:

代码语言:javascript
运行
复制
parsed, 
items: Array(1)
0:
id: "ac1"
t: "45081063"
type: "node"
u: "static/icons/bank.png"
__proto__: Object
length: 1
__proto__: Array(0)
type: "LinkChart"

这就是我想要的。一个新的JSON对象

以及:

代码语言:javascript
运行
复制
unparsed {&#39;type&#39;: &#39;LinkChart&#39;, &#39;items&#39;: [{&#39;type&#39;: &#39;node&#39;, &#39;id&#39;: &#39;ac1&#39;, &#39;u&#39;: &#39;static/icons/bank.png&#39;, &#39;t&#39;: &#39;45081063&#39;}]}

这是我不想要的。

|tojson jinja模板un是变量,因此它以来自python (烧瓶)的相同格式传递。JSON.parse() javascript函数将其从字符串转换为javascript中的JSON对象。

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2018-05-11 12:04:35

嘿,您所拥有的json是一个数组,而不是一个对象,因此您必须考虑到这一点,首先访问您想要的对象,然后访问属性。

代码语言:javascript
运行
复制
<div id="name">{{ items[0]['name'] }}</div>  

在本例中,x成为对象,您可以这样使用它:

代码语言:javascript
运行
复制
{% for x in items %}
    <div id="name">{{ x['name'] }}</div>  
{% endfor %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50291923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档