使用Python3和jinja2从嵌套Json响应中获取信息



我正在寻找使用python迭代某些JSON的帮助。

目前我有一个函数,它指向一个JSON API URL,获取JSON并将结果呈现为results.html。在results.html中,我使用jinja2和for循环来获取一些信息。我可以从_id和text中获得信息,但我想做的是从user部分获得信息(请参阅下面的JSON示例(。

结果.py

@app.route("/results/")
def results():
catfactsURl = "https://cat-fact.herokuapp.com/facts/"
webUrl = urllib.request.urlopen(catfactsURl)
if(webUrl.getcode() == 200):
data = json.loads(webUrl.read())
return render_template("results.html", data=data['all'], title="Results")
else:
print("Received error, cannot parse results")

结果.html

{% extends 'layout.html' %}
{% block title %}{{title}}{% endblock %}
{% block content %}
<div>
{% for datas in data %}
<span>{{ datas['_id'] }}</span>
<p>{{ datas['text'] }} </p>
<p>{{ datas['user'] }}</p>
{% endfor %}
</div>

{%endblock content%}

JSON响应示例

"all": [
{
"_id": "58e0088b0aac31001185ed09",
"text": "The world's largest cat measured 48.5 inches long.",
"type": "cat",
"user": {
"_id": "58e007480aac31001185ecef",
"name": {
"first": "Kasimir",
"last": "Schulz"
}
},
"upvotes": 7,
"userUpvoted": null
},

该数据源在其中一个条目中缺少"user"键(58e08450aac31001185ecfd(。通过先检查用户密钥的存在来绕过它。

<div>
{% for datas in data %}
<span>{{ datas['_id'] }}</span>
<p>{{ datas['text'] }} </p>
{% if 'user' in datas.keys() %}
<p>{{ datas['user']['name']['first'] }} {{ datas['user']['name']['last'] }}</p>
{% endif %}
{% endfor %}
</div>

最新更新