Jinja2 解析 JSON 对象,无法从中获取值



我正在尝试解析一个字符串。我有两个变体:

  1. 未加载 json.loads((
  2. 加载

它们看起来像:

1.

{"ticket_info": {"ticket_id": "HGAS52GH98JK", "ticket_status": 1, "ticket_date": "Wed, 13 May 2020 20:40 PM", "ticket_replied": false, "ticket_reply_message": null, "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"}]}
  1. {'ticket_info': {'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'}]}

我的蟒蛇代码:

if ticket:
"~ Engine for JSON data processing ~"
_ticket_data_ = _tickets_.get_ticket(ticket.ticket_id)
ticket_data = json.loads(str(_ticket_data_.replace('null', '"None"')))

return render_template('index.html',
title='Main profile',
template='dashboard-template',
current_user=current_user,
ticket_data=ticket_data,
body="You are now logged in!")

当我传递加载的时,我可以得到这些结果:

我在HTML中传递的Json是:

{'ticket_info': {'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'}]}

我用以下方法解析它:

{% if ticket_data %} 
{% for ticket in ticket_data["ticket_info"] %}
<h3>variables... {{ ticket }}</h3>
{% if ticket["ticket_issued_to"] == current_user.public_id %}
<!-- I cannot reach this or any other variable with ticket[ANYVAR]... -->
{% endif %}
{% endfor %}
{% endif %}

结果:

variables... ticket_id
variables... ticket_status
variables... ticket_date
variables... ticket_replied
variables... ticket_reply_message
variables... ticket_issued_by
variables... ticket_issued_to

但是当我尝试通过以下方式在 for 循环中达到一个值时:

<h2> Receiver - {{ticket["ticket_issued_to"]}}</h2>

我只是将值显示为空白。

你实际上是在试图从错误的 dict 位置获取价值。

让我们浏览字典,看看代码的实际查找位置。

这是您的机票数据:

{
"ticket_info": {
"ticket_id": "HGAS52GH98JK",
"ticket_status": 1,
"ticket_date": "Wed, 13 May 2020 20:40 PM",
"ticket_replied": false,
"ticket_reply_message": null,
"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"
}
]
}

这是您的ticket_data["ticket_info"]:

{
"ticket_id": "HGAS52GH98JK",
"ticket_status": 1,
"ticket_date": "Wed, 13 May 2020 20:40 PM",
"ticket_replied": false,
"ticket_reply_message": null,
"ticket_issued_by": "65313696-d0a0-4019-8f89-e5e8ab01d6b7",
"ticket_issued_to": "1e76b45c-67cd-4100-ae43-d8adf85d4362"
}

当您在循环下方运行时:

{% for ticket in ticket_data["ticket_info"] %}

它实际上遍历ticket_info字典的键列表,这就是为什么在循环中打印 ticket 变量时,您实际上是在输出中获取键列表,所以如果你想获取值,你应该试试这个:

{% if ticket_data %} 
{% for ticket in ticket_data["ticket_info"] %}
<h3>variable key... {{ ticket }}</h3>
<h3>variable value... {{ ticket_data["ticket_info"][ticket] }}</h3>
{% endfor %}
{% endif %}

您将使用上面的代码获得键和值。您可以相应地修改"if"语句。

希望这有帮助!!

最新更新