首页 > 解决方案 > jinja2.exceptions.UndefinedError - 试图达到特定值

问题描述

我正在尝试解析一个 JSON 对象,它是 -

{
  "ticket": {
    "ticket_id": "HGAS52GH98JK",
    "ticket_status": 1,
    "ticket_date": "Wed, 13 May 2020 20:40 PM",
    "ticket_replied": false,
    "ticket_reply_message": "None",
    "ticket_issued_by": "65313696-d0a0-4019-8f89-e5e8ab01d6b7",
    "ticket_issued_to": "1e76b45c-67cd-4100-ae43-d8adf85d4362"
  },
  "messages": [
    {
      "msg_ticket_id": "HGAS52GH98JK",
      "msg_id": "2d4c0968-337b-4401-ad09-80e8890a5dce",
      "msg_sender": "65313696-d0a0-4019-8f89-e5e8ab01d6b7",
      "msg_date": "Wed, 13 May 2020 20:48 PM",
      "msg": "test_msg1"
    },
    {
      "msg_ticket_id": "HGAS52GH98JK",
      "msg_id": "2d4c0968-337b-4401-ad09-80e88f0a7dce",
      "msg_sender": "65313696-d0a0-4019-8f89-e5e8ab01d6b7",
      "msg_date": "Wed, 13 May 2020 20:59 PM",
      "msg": "test_msg3"
    },
    {
      "msg_ticket_id": "HGAS52GH98JK",
      "msg_id": "2d4c0968-337b-4401-ad05-80e8890a5dce",
      "msg_sender": "65313696-d0a0-4019-8f89-e5e8ab01d6b7",
      "msg_date": "Wed, 13 May 2020 20:49 PM",
      "msg": "test_msg2"
    }
  ]
}

首先,我需要进入“消息”,然后获取每条消息的 id 和其他值。为此,我使用 -

{% if ticket_data["messages"] %}
    {% for msg in ticket_data["messages"] %}
        {{ ticket_data['messages'][msg]['msg_id'] }}
    {% endfor %}
{% endif %}

但我确实得到了一个错误jinja2.exceptions.UndefinedError: list object has no element {'msg_ticket_id': 'HGAS52GH98JK', 'msg_id': '2d4c0968-337b-4401-ad09-80e8890a5dce', 'msg_sender': '65313696-d0a0-4019-8f89-e5e8ab01d6b7', 'msg_date': 'Wed, 13 May 2020 20:48 PM', 'msg': 'test_msg1'}

我做错了什么?从中获得价值的正确方法是什么?我尝试{{ ticket_data['messages'][msg]['msg_id'] }}在 for 循环中使用,然后我确实从消息中获取了一个 ID,但是 3 次,因为在 JSON 中定义了 3 条消息。

标签: htmlflaskjinja2

解决方案


我能够通过以下方式修复它:

{% if ticket_data["messages"] %}
    {% for msg in ticket_data["messages"] %}
        {{ msg['msg'] }}
    {% endfor %}
{% endif %}

推荐阅读