我在处理来自zabbix的数据时遇到问题。我创建如下请求:
requests = zapi.host.get({"output": ZabbixApiValues,"selectInventory":ZabbixApiValues, "filter": {"host": ["Cisco"]}})
ZabbixApiValues是我需要从zabbix获取的字段列表:(列表是否在其他函数中生成,现在都无所谓)
['oob_ip', 'location', 'description', 'host', 'os']
<class 'list'>
然后从Zabbix API获得响应:
[{'hostid': '10460', 'description': 'This is testing host', 'host': 'Cisco', 'inventory': {'hostid': '10460', 'oob_ip': '', 'location': 'Tokyo', 'os': 'Linux Mint'}}]
<class 'list'>
现在我必须获取所有这些字段
('host': 'Cisco', 'location': 'Tokyo' etc. etc.)
'hostid': '10460', 'description': 'This is testing host', 'host': 'Cisco','hostid': '10460', 'oob_ip': '', 'location': 'Tokyo', 'os': 'Linux Mint'
也许作为字典。没有“库存”。然后我可以获取键和值并创建xml。
现在我可以获取包含所有数据的字符串或仅包含库存数据而不是所有字段的x ['inventory']。
请帮助
答案 0 :(得分:0)
打印(请求[0])
{'hostid': '10460', 'description': 'This is testing host names Fortigate 100D.', 'host': 'Fortinet-Fortigate 100D', 'inventory': {'hostid': '10460', 'oob_ip': '', 'location': 'Warsaw', 'os': ''}}
打印(请求)
[{'hostid': '10460', 'description': 'This is testing host names Fortigate 100D.', 'host': 'Fortinet-Fortigate 100D', 'inventory': {'hostid': '10460', 'oob_ip': '', 'location': 'Warsaw', 'os': ''}}]
答案 1 :(得分:0)
Zabbix响应的类型为list,然后您将其转换为json数据,所以现在它是json字符串,您无法访问此类元素,您需要加载
这样的json数据JSrequests = json.dumps(requests)
x = json.loads(JSrequests)
resp_dict = x[0]
现在这是字典,您可以访问类似
的元素x[0]['description']
不确定为什么要这样做,请求的类型为列表,无需转换为json,将字典移出列表并访问元素,即
x = requests[0] # dict
答案 2 :(得分:0)
简单...我是Python新手,...呃 谢谢。所以我有:
print('requests',requests)
print ('ZabbixApiValues',ZabbixApiValues)
for x in ZabbixApiValues:
if (x in requests[0]):
print(x,":",requests[0][x])
elif (x in requests[0]['inventory']):
print(x,":",requests[0]['inventory'][x])
我得到:
requests [{'hostid': '10460', 'description': 'This is testing host names Fortigate 100D.', 'host': 'Fortinet-Fortigate 100D', 'inventory': {'hostid': '10460', 'oob_ip': '', 'location': 'Warsaw', 'os': ''}}]
ZabbixApiValues ['oob_ip', 'location', 'description', 'host', 'os']
oob_ip :
location : Warsaw
description : This is testing host names Fortigate 100D.
host : Fortinet-Fortigate 100D
os :