【问题标题】:Get information from a Nested Json response using Python3 and jinja2使用 Python 和 jinja2 从嵌套的 Json 响应中获取信息
【发布时间】:2020-10-06 20:57:01
【问题描述】:

我正在寻求使用 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
},

【问题讨论】:

    标签: python jinja2


    【解决方案1】:

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

    【讨论】:

    • HI @FLSte,不幸的是,这不起作用,因为当我尝试指定信息时出现以下错误(即

      {{ datas['user']['name' ]['first'] }} {{ datas['user']['name']['last'] }}

      ) : jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'user'
    • 我查看了数据源。 1 条记录缺少“用户”属性。更新了答案。
    • 感谢@FLSte 这对我有用。刚开始学习这些东西,所以真的帮助我越过了一座山。
    猜你喜欢
    • 2012-12-23
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2022-01-09
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多