我试图从JSON中获取值,但我的for循环多次只得到第一个值。
我使用了下面的for循环
def get_nodeid1():
url='https://%s/api/node/class/fabricNode.json' % apic
response = requests.get(url, cookies=session_cookie, timeout=2, verify=False)
json_data = json.loads(response.text)
node_id = json_data['imdata'][0]['fabricNode']['attributes']['name']
for node in node_id:
m1 = json_data['imdata'][0]['fabricNode']['attributes']['name']
m2 = json_data['imdata'][0]['fabricNode']['attributes']['serial']
m3 = json_data['imdata'][0]['fabricNode']['attributes']['address']
print(f"Node ID: {m1} Serial: {m2} Address: {m3}")
结果是第一个值的7倍。
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
Node ID: LEAF101 Serial: FDO21230U65 Address: 10.1.152.66
我猜测你想循环处理的是 json_data['imdata']
. 你的原始代码从未提及循环中的节点。试试这个。
def get_nodeid1():
url='https://%s/api/node/class/fabricNode.json' % apic
response = requests.get(url, cookies=session_cookie, timeout=2, verify=False)
json_data = json.loads(response.text)
for node in json_data['imdata']:
m1 = node['fabricNode']['attributes']['name']
m2 = node['fabricNode']['attributes']['serial']
m3 = node['fabricNode']['attributes']['address']
print(f"Node ID: {m1} Serial: {m2} Address: {m3}")
你实际上是在迭代 "LEAF101 "这个字符串的7个字符。另外,你没有在循环块的任何地方使用 "节点 "变量。
你可能想在json_data的更高层次上迭代一个dict,然后在访问下级变量时使用node变量作为键。