Список не вложенных JSON для передачи в шаблон - PullRequest
1 голос
/ 24 сентября 2019

Я запрашиваю свою базу данных и присваиваю все результаты переменной reports

results = db.engine.execute("SELECT * FROM reports")
reports = [dict(r) for r in results]

Если я распечатаю эту переменную, у меня есть:

[{'id': 1, 'type': '{"organization":"Dunder Mifflin","reported_at":"2015-04-21","created_at":"2015-04-22","inventory":[{"name":"paper","price":"2.00"},{"name":"stapler","price":"5.00"}]}'}, {'id': 2, 'type': '{"organization":"MOM Corp.","reported_at":"3015-08-24","created_at":"3015-08-23","inventory":[{"name":"bending unit","price":"2000.00"},{"name":"stapling unit","price":"50.00"}]}'}, {'id': 4, 'type': '{"organization":"Flowers Inc.","reported_at":"2017-11-19","created_at":"2017-11-23","inventory":[{"name":"Flower pot","price":"2.00"},{"name":"Roses, 24","price":"50.00"}]}'}, {'id': 5, 'type': '{invalid_json'}]

Я хочуотобразил переменную reports в моем шаблоне и сделал for loop для итерации по всем отчетам.

@app.route('/allreports')
def allreports():
  return render_template("allreports.html", reports=reports)

HOWEVER

Поскольку это список, яне может выполнить цикл for.

Например, я не могу напечатать «организацию» для каждого отчета.Как я могу это сделать?

Если я делаю цикл for, я могу печатать только идентификатор и тип, но не другие элементы внутри type

{% for report in reports %}
  {{report['id']}
  {{report['type']}
{% endfor %}

Если я делаю {{report['type']['organization']}}ничего не распечатано.Я думаю, потому что вложенный диктат - это строка, а не диктат.

'type': '{"organization":"Dunder Mifflin","reported_at":"2015-04-21","created_at":"2015-04-22","inventory":[{"name":"paper","price":"2.00"},{"name":"stapler","price":"5.00"}]}'}

1 Ответ

1 голос
/ 24 сентября 2019

Похоже, значение type является допустимым JSON.Быстрое решение состоит в том, чтобы переопределить строковое значение с помощью разобранного JSON в форме dict.

import json

for r in reports:
    r['type'] = json.loads(r['type'])

Теперь вы можете сделать report['type']['organization'] внутри шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...