首页 > 解决方案 > 使用 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
},

标签: pythonjinja2

解决方案


该数据源在其中一个条目 (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>

推荐阅读