获取特定值的JSON数据

时间:2019-05-20 14:32:15

标签: python json parsing

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

https_request = 'https://' + host + '/restconf/data/' + operation
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()

我得到的数据如下:

{
    "Cisco-IOS-XE-segment-routing:ipv4": {
        "prefixes": [
            {
                "ipprefix": "1.1.1.1/32",
                "index": {
                    "range-start": 333,
                    "range": 1
                }
            }
        ]
    }
}

基本上,我想返回字段"range-start"的值333。我尝试了以下方法,但没有用。

for element in r: 
    id = element['range-start'] 
    print(id) 

反正有得到这个价值的东西吗?

3 个答案:

答案 0 :(得分:1)

从Python控制台:

>>> import json
... data = json.loads('{"Cisco-IOS-XE-segment-routing:ipv4": {"prefixes": [{"ipprefix": "1.1.1.1/32", "index": {"range-start": 333, "range": 1}}]}}')
... print(data['Cisco-IOS-XE-segment-routing:ipv4']['prefixes'][0]['index']['range-start'])
333

>>>

答案 1 :(得分:0)

您需要从JSON的开头开始,然后逐步找到所需的键。为此,您需要从Cisco-IOS-XE-segment-routing:ipv4开始。

prefixes = r.json()["Cisco-IOS-XE-segment-routing:ipv4"]["prefixes"]
id = prefixes[0]["index"]["range-start"]

如果有多个前缀,则可以循环访问它们并访问每个range-start

答案 2 :(得分:0)

由于您正在遍历元素,所以我建议使用辅助函数使用这种方法:

def get_id(element):
    prefixes = r.json()["Cisco-IOS-XE-segment-routing:ipv4"]["prefixes"]
    id = prefixes[0]["index"]["range-start"]
    return id

然后您可以按照您的问题进行操作:

for element in r:
    id = get_id(element)
    print(id)