几乎没有类似的主题,但是如果您知道ID的数量和名称,它们都将指导如何解析嵌套的JSON。我需要做的是通用代码。
我正在创建使用多个不同的GET / POST / DELETE请求的WEB应用程序。 现在,我着重分析GET请求。 我现在拥有的是可解析非嵌套JSON响应的通用模板。
我的通用 json.html
[...]
{% if response %}
{% for id, value in response.items %}
<p>{{ id }}: {{ value }}</p>
{% endfor %}
{% else %}
<p>No IDs are available.</p>
{% endif %}
[...]
及其完美的通用性,适用于我未得到示例嵌套的所有响应(id:值):
version: 3.4
level:
system: unix
server_time: 1560252637000
server_utc: 2
但是当我得到嵌套的json响应时,这个通用模板不是很好。响应如下:
transfers: [{'direct': 'SEND', 'type': 'MESSAGE', 'compatstate': 'T', 'ack': '', 'state': 'T', 'phase': 'X', 'phasestep': 'X', 'idf': 'NOW', 'idt': 'F1112091', 'frec': '', 'msg': 'test'}]
numberOfSelectedRecords: 2
numberOfUsedRecords: 2
numberOfRecords: 10000
offset: 0
添加视图,也许会有所帮助:
def transfers(request, host_id):
hostname = Host.objects.get(pk=(host_id))
response = requests.get(
'https://{}:1769/v1/transfers?fields=aa%bb'.format(hostname),
verify='/cert/cacerts.pem',
headers={'Accept': 'application/json', 'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxx'},
).json()
context = {'response': response, 'hostname': hostname}
return render(request, 'app/json.html', context)
我的问题是,是否可以创建用于解析嵌套json响应的通用模板?在将其传递给模板之前,应该在html模板中还是在视图中的某个位置对其进行解析?
答案 0 :(得分:0)
您可以如下迭代所有键值对:
def iterate_over(d):
"""
This function iterate over all the key-value pairs of a dictionary
d -- a dictionary to iterate through
"""
if not isinstance(d, dict) and not type(d) == list:
return
if type(d) == list:
for entry in d:
iterate_over(entry)
else:
for k, v in d.items():
if k == 'a key':
doSomething()
if v == 'a value':
doSomethingElse()
if isinstance(v, dict) or type(v) == list:
iterate_over(v)
return
并为您要对其执行某些操作的响应中的每个键或值创建一个if k == 'something'
或if value == 'something
。