python - 使用 Python3 和 jinja2 从嵌套的 Json 响应中获取信息
问题描述
我正在寻找使用 python 遍历一些 JSON 的帮助。
目前我有一个函数,它转到一个作为 JSON API 的 URL,获取 JSON 并将结果呈现到 results.html 中。在 results.html 中,我使用 jinja2 和 for 循环来获取一些信息。我能得到的是来自 _id 和 text 的信息,但是我想做的是从用户部分获取信息(参见下面的 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 内容 %}
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
},
解决方案
该数据源在其中一个条目 (58e008450aac31001185ecfd) 中缺少“用户”键。通过首先检查用户密钥的存在来绕过它。
<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>
推荐阅读
- java - 为什么spring数据流重启后流状态为UNKNWON
- windows - 从另一台设备复制 d3d11texture
- selenium - 如何在 PyCharm 中为 selenium-robotframework 更新 Chromedriver 版本
- html - 导航栏下拉菜单在更宽的屏幕上不起作用
- c# - 从 ArgumentException 中获取原始错误消息
- visual-studio-code - 如何在 VSCode 中按 markdown Group 运行代码?
- sql - OreintDb Select Query IN Operator filter with traverse Subquery 不起作用
- python - Pandas read_csv() 将最后一行作为 col 标题而不是第一行?
- python - 在没有其他子字符串的情况下对子字符串进行排序
- java - 如何使用querydsl从子查询平均集合中获取总平均值