python - 通过 Python 脚本/代码获取特定的 dict 值
问题描述
我正在通过 Python 执行 RESTAPI 调用,并在执行 json.loads 调用后以 dict 格式获取值。
挑战是,我想获取以下值:
a)“校验和”:“f9676703bba1f3ac726de1445de27726”
b) 'zone-name': 'Axel_Rodge_SPA' (输出中所有可用的区域名称)
我尝试了很多通过 .get() 方法获取的方法,但并没有太大帮助。此外,它不是正确的 dict 数据类型,这是另一个挑战。任何建议将不胜感激。
global switch_config_backup_json
call_config_backup = ""
try:
switch_config_url = 'http://' + ipaddress + '/rest/running/brocade-zone/effective-configuration'
switch_config_backup_call_headers = {'Authorization': custom_api_key, 'Accept': 'application/yang-data+json', 'Content-Type': 'application/yang-data+json'}
call_config_backup = requests.get(url=switch_config_url, headers=switch_config_backup_call_headers)
switch_config_backup_dict = json.loads(call_config_backup.content)
print("Switch zone and members data backup:\n", switch_config_backup_dict)
检索到的值:(字典类型)
{'响应':{'有效配置':{'default-zone-access':1,'cfg-action':0,'db-max':1045274,'db-avail':1041908,'db-已提交':1268,'db-transaction':0,'db-chassis-wide-committed':2280,'transaction-token':0,'校验和':'f9676703bba1f3ac726de1445de27726','cfg-name':'b238638' , '启用区域': [{'zone-name': 'Axel_Dellpr740A', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63: 08:60:1d:e8', '50:06:01:6b:08:60:1d:e8', '10:00:00:10:9b:58:31:71']}}, {' zone-name': 'Axel_Dellpr740C', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:1d:e8', ' 50:06:01:63:08:60:1d:e8','10:00:00:10:9b:58:31:e3']}},{'zone-name':'Axel_Rodge_SPA','zone-type':0,'member-entry':{'entry-name ': ['50:06:01:63:08:60:1d:e8', '50:06:01:63:08:64:0f:45']}}, {'区域名称': ' Axel_Rodge_SPA_Test', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01: 63:08:64:0f:45']}}, {'zone-name': 'Axel_Rodge_SPB', 'zone-type': 0, 'member-entry': {'entry-name': ['50: 06:01:6b:08:60:1d:e8', '50:06:01:6b:08:60:0f:45']}}, {'区域名称': 'Rodge-Dellpr730H', ' zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:64:0f:45', '50:06:01:6b:08: 60:0f:45', '10:00:00:10:9b:26:3f:fb']}}, {'区域名称:'Rodge_Dellpr730E','区域类型':0,'成员入口':{'入口名称':['50:06:01:6b:08:60:0f:45',' 50:06:01:63:08:64:0f:45', '10:00:00:90:fa:02:4c:c4']}}, {'区域名称': 'dellpr730B_Marge', ' zone-type': 0, 'member-entry': {'entry-name': ['21:00:00:24:ff:17:19:cc', '21:00:00:24:ff: 17:19:cd', '50:00:09:75:a8:1d:40:19', '50:00:09:75:a8:1d:40:5d']}}]}}}cc'、'21:00:00:24:ff:17:19:cd'、'50:00:09:75:a8:1d:40:19'、'50:00:09:75:a8: 1d:40:5d']}}]}}}cc'、'21:00:00:24:ff:17:19:cd'、'50:00:09:75:a8:1d:40:19'、'50:00:09:75:a8: 1d:40:5d']}}]}}}
解决方案
你有dictionary
,list
所以你需要for
-loop (或索引 ie. [0]
)来获取值。
而且因为您已经嵌套dictionares
,所以您将不得不使用所有键来获取嵌套值。
data = {'Response': {'effective-configuration': {'default-zone-access': 1, 'cfg-action': 0, 'db-max': 1045274, 'db-avail': 1041908, 'db-committed': 1268, 'db-transaction': 0, 'db-chassis-wide-committed': 2280, 'transaction-token': 0, 'checksum': 'f9676703bba1f3ac726de1445de27726', 'cfg-name': 'b238638', 'enabled-zone': [{'zone-name': 'Axel_Dellpr740A', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:6b:08:60:1d:e8', '10:00:00:10:9b:58:31:71']}}, {'zone-name': 'Axel_Dellpr740C', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:1d:e8', '50:06:01:63:08:60:1d:e8', '10:00:00:10:9b:58:31:e3']}}, {'zone-name': 'Axel_Rodge_SPA', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:63:08:64:0f:45']}}, {'zone-name': 'Axel_Rodge_SPA_Test', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:63:08:64:0f:45']}}, {'zone-name': 'Axel_Rodge_SPB', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:1d:e8', '50:06:01:6b:08:60:0f:45']}}, {'zone-name': 'Rodge-Dellpr730H', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:64:0f:45', '50:06:01:6b:08:60:0f:45', '10:00:00:10:9b:26:3f:fb']}}, {'zone-name': 'Rodge_Dellpr730E', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:0f:45', '50:06:01:63:08:64:0f:45', '10:00:00:90:fa:02:4c:c4']}}, {'zone-name': 'dellpr730B_Marge', 'zone-type': 0, 'member-entry': {'entry-name': ['21:00:00:24:ff:17:19:cc', '21:00:00:24:ff:17:19:cd', '50:00:09:75:a8:1d:40:19', '50:00:09:75:a8:1d:40:5d']}}]}}}
#print('[DEBUG] type:', type(data) )
#print('[DEBUG] keys:', data.keys() )
#print('[DEBUG] type:', type(data['Response']) )
#print('[DEBUG] keys:', data['Response'].keys() )
#print('[DEBUG] type:', type(data['Response']['effective-configuration']) )
#print('[DEBUG] keys:', data['Response']['effective-configuration'].keys() )
checksum = data['Response']['effective-configuration']['checksum']
print('checksum:', checksum)
zones = data['Response']['effective-configuration']['enabled-zone']
print('type:', type(zones))
for item in zones:
print('zone-name:', item['zone-name'])
结果:
checksum: f9676703bba1f3ac726de1445de27726
type: <class 'list'>
zone-name: Axel_Dellpr740A
zone-name: Axel_Dellpr740C
zone-name: Axel_Rodge_SPA
zone-name: Axel_Rodge_SPA_Test
zone-name: Axel_Rodge_SPB
zone-name: Rodge-Dellpr730H
zone-name: Rodge_Dellpr730E
zone-name: dellpr730B_Marge
顺便提一句:
您可以使用json.dumps(..., indent=...)
缩进对其进行格式化,以更好地查看JSON
.
如果你看到{...}
那么它是 (nested) dictionary
,如果你看到[...]
那么它是 (nested) list
。
您还可以使用type(item)
来测试您是否有(嵌套)dictionary
或list
.
并且dictionary
您可以使用item.keys()
来查看您可以在此级别上使用的键。
data = {'Response': {'effective-configuration': {'default-zone-access': 1, 'cfg-action': 0, 'db-max': 1045274, 'db-avail': 1041908, 'db-committed': 1268, 'db-transaction': 0, 'db-chassis-wide-committed': 2280, 'transaction-token': 0, 'checksum': 'f9676703bba1f3ac726de1445de27726', 'cfg-name': 'b238638', 'enabled-zone': [{'zone-name': 'Axel_Dellpr740A', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:6b:08:60:1d:e8', '10:00:00:10:9b:58:31:71']}}, {'zone-name': 'Axel_Dellpr740C', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:1d:e8', '50:06:01:63:08:60:1d:e8', '10:00:00:10:9b:58:31:e3']}}, {'zone-name': 'Axel_Rodge_SPA', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:63:08:64:0f:45']}}, {'zone-name': 'Axel_Rodge_SPA_Test', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:60:1d:e8', '50:06:01:63:08:64:0f:45']}}, {'zone-name': 'Axel_Rodge_SPB', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:1d:e8', '50:06:01:6b:08:60:0f:45']}}, {'zone-name': 'Rodge-Dellpr730H', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:63:08:64:0f:45', '50:06:01:6b:08:60:0f:45', '10:00:00:10:9b:26:3f:fb']}}, {'zone-name': 'Rodge_Dellpr730E', 'zone-type': 0, 'member-entry': {'entry-name': ['50:06:01:6b:08:60:0f:45', '50:06:01:63:08:64:0f:45', '10:00:00:90:fa:02:4c:c4']}}, {'zone-name': 'dellpr730B_Marge', 'zone-type': 0, 'member-entry': {'entry-name': ['21:00:00:24:ff:17:19:cc', '21:00:00:24:ff:17:19:cd', '50:00:09:75:a8:1d:40:19', '50:00:09:75:a8:1d:40:5d']}}]}}}
import json
text = json.dumps(data, indent=2)
print(text)
结果:
{
"Response": {
"effective-configuration": {
"default-zone-access": 1,
"cfg-action": 0,
"db-max": 1045274,
"db-avail": 1041908,
"db-committed": 1268,
"db-transaction": 0,
"db-chassis-wide-committed": 2280,
"transaction-token": 0,
"checksum": "f9676703bba1f3ac726de1445de27726",
"cfg-name": "b238638",
"enabled-zone": [
{
"zone-name": "Axel_Dellpr740A",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:63:08:60:1d:e8",
"50:06:01:6b:08:60:1d:e8",
"10:00:00:10:9b:58:31:71"
]
}
},
{
"zone-name": "Axel_Dellpr740C",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:6b:08:60:1d:e8",
"50:06:01:63:08:60:1d:e8",
"10:00:00:10:9b:58:31:e3"
]
}
},
{
"zone-name": "Axel_Rodge_SPA",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:63:08:60:1d:e8",
"50:06:01:63:08:64:0f:45"
]
}
},
{
"zone-name": "Axel_Rodge_SPA_Test",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:63:08:60:1d:e8",
"50:06:01:63:08:64:0f:45"
]
}
},
{
"zone-name": "Axel_Rodge_SPB",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:6b:08:60:1d:e8",
"50:06:01:6b:08:60:0f:45"
]
}
},
{
"zone-name": "Rodge-Dellpr730H",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:63:08:64:0f:45",
"50:06:01:6b:08:60:0f:45",
"10:00:00:10:9b:26:3f:fb"
]
}
},
{
"zone-name": "Rodge_Dellpr730E",
"zone-type": 0,
"member-entry": {
"entry-name": [
"50:06:01:6b:08:60:0f:45",
"50:06:01:63:08:64:0f:45",
"10:00:00:90:fa:02:4c:c4"
]
}
},
{
"zone-name": "dellpr730B_Marge",
"zone-type": 0,
"member-entry": {
"entry-name": [
"21:00:00:24:ff:17:19:cc",
"21:00:00:24:ff:17:19:cd",
"50:00:09:75:a8:1d:40:19",
"50:00:09:75:a8:1d:40:5d"
]
}
}
]
}
}
}
推荐阅读
- php - Spatie 用户权限 - 属于许多公司,解决方案反馈
- java - 如何在 Android Studio 中创建计分器?
- python-3.x - 使用 Beautifulsoup 在 Python 中提取数据
- python - 使用 Django 在电子邮件附件中附加多个 PDF 文件
- javascript - 下拉菜单移动页面溢出
- python - Python - OOP 从配置文件创建不同的对象
- python - Discord.py 为会话添加超时
- javascript - Javascript:使用 super 在子原型函数中调用父原型函数
- gem5 - PUTS PUTS GETS 在内存访问中是什么意思?
- html - 如何解决 Angular 中的 ngSwitchCase?