Python - динамическое представление JSON
Есть необходимость сформировать HTML-код в котором будет динамическое представление JSON по аналогии с Mazilla (открывать/сворачивать).
Код, который я написал, работает, каких-то ошибок в его работе не заметил, но мне кажется, что я изобретаю велосипед, используя то, что написал.
Возможно, я мог бы упростить код, избавляясь от таких строк как str(type(body))[8:12] == 'dict':
. Может быть у вас найдутся какие-то идеи как это можно реализовать чуточку проще, чем это сделал я не только в части условия, но и в общем. Прошу игнорировать голову HTML и процесс записи, это служит исключительно для проверки выходного результат, итог будет загружен в шаблон Django.
import json
# Различные входные данные JSON
json_content = json.loads ('{"date":"01-01-2000", "version":"1", "all":[{"value": "Иванов Виктор","unrestricted_value": "Иванов Виктор","data": {"surname": "Иванов","name": "Виктор","patronymic": null,"gender": "MALE"}},{"value": "Иванченко Виктор","unrestricted_value": "Иванченко Виктор","data": {"surname": "Иванченко","name": "Виктор","patronymic": null,"gender": "MALE"}},{"value": "Виктор Иванович", "unrestricted_value": "Виктор Иванович","data": {"surname": null,"name": "Виктор","patronymic": "Иванович", "gender": "MALE"}}]}')
# Шапка HTML-файла
content_file = '<html><head><style>div._block {padding: 5px 5px 5px 25px;}</style></head><body>'
def add_block(head, body):
body_ = ''
if str(type(body))[8:12] == 'dict':
for row in body.keys():
body_ += add_block(row, body[row])
elif str(type(body))[8:12] == 'list':
i = 0
for row in body:
body_ += add_block(i, row)
i += 1
else:
body_ += str(body) + '<br>'
return '<details><summary>' + str(head) + '</summary><div class="_block">' + str(body_) + '</div></details>'
# Пробегаюсь по всем элементам словаря из JSON
for row in json_content.keys():
content_file += add_block(row, json_content[row])
# Дописываю конец HTML-файлу и записываю его
content_file += '</body></html>'
with open('test.html', 'w') as f:
f.write(content_file)