Python for循环只返回第一个值

问题描述 投票:0回答:1

我试图从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
python json
1个回答
2
投票

我猜测你想循环处理的是 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}")

0
投票

你实际上是在迭代 "LEAF101 "这个字符串的7个字符。另外,你没有在循环块的任何地方使用 "节点 "变量。

你可能想在json_data的更高层次上迭代一个dict,然后在访问下级变量时使用node变量作为键。

© www.soinside.com 2019 - 2024. All rights reserved.