首页 > 解决方案 > 获取 JSON 和 Python 中的特定值

问题描述

我使用以下代码从 RESTCONF HTTPS 请求中获取 JSON 数据。

https_request = 'https://' + host + '/restconf/data/Cisco-IOS-XE-native:native/interface/'
headers = {'Content-type': 'application/yang-data+json', 'Accept': 'application/yang-data+json'}
r = requests.get(https_request, auth=(user, password), headers=headers, verify=False)
print r.json()

我得到的 JSON 文件:

{
"Cisco-IOS-XE-native:interface": {
    "GigabitEthernet": [
        {
            "name": "1",
            "description": "DON'T TOUCH ME",
            "isis": {
                "Cisco-IOS-XE-isis:metric": {
                    "value": 2
             }
            ....
        },
        {
            "name": "2",
            "isis": {
                "Cisco-IOS-XE-isis:metric": {
                    "value": 4
                } ....

        },
        {
            "name": "3",
            "shutdown": [
                null
            ],
            "isis": {
                "Cisco-IOS-XE-isis:metric": {
                    "value": 7
                }....                
        }
    ],
    "Loopback": [
        {
            "name": 0,
            "isis": {
                "Cisco-IOS-XE-isis:metric": {
                    "value": 1
                }               
    ],
    "Tunnel": [
        {
            "name": 0,
            "isis": {
                "Cisco-IOS-XE-isis:metric": {
                    "value": 3
                }....
            }
    ]
}

基本上,我希望我的函数返回每个接口的"value"字段isis。我尝试了以下代码GigabitEthernet

value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['metric']['value']

我收到了这个错误:

print Router_1.get_isis_metric()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['metric']['isis']
KeyError: 'metric'

标签: pythonjson

解决方案


我想,你拼错metricCisco-IOS-XE-isis:metric

尝试 :

value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['Cisco-IOS-XE-isis:metric']['value']

编辑 1

for index in range(len(r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'])):
    value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][index]['isis']['Cisco-IOS-XE-isis:metric']['value']
    print(value)

推荐阅读