从 zabbix API 响应列表 Python3 获取键和值

Getting keys and values from zabbix API response list Python3

我在处理来自 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.) 

从 zabbix 响应并以 XML 格式向另一个系统创建 API 请求。 我知道该怎么做,但我无法从这个回复中获得必要的字段。我希望我只得到 [key]:[value] 而没有 jsons childm: 'hostid': '10460', 'description': 'This is testing host', 'host': 'Cisco','hostid': '10460', 'oob_ip': '', 'location': 'Tokyo', 'os': 'Linux Mint' 也许作为字典。没有 "inventory"。然后我可以获得键和值并创建 xml。

现在我可以获得包含所有数据的字符串或仅包含库存数据而不是所有字段的 x['inventory']。

请帮忙

打印(请求[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': ''}}]

Zabbix 响应是列表类型,然后您将其转换为 json 数据,所以现在它是 json 字符串,您无法访问这样的元素,您需要加载 json 数据如

JSrequests = json.dumps(requests)
x = json.loads(JSrequests)
resp_dict = x[0]

现在这是一个字典,你可以访问像

这样的元素
x[0]['description']

不确定你为什么这样做,请求是列表类型,无需转换为 json,从列表中获取字典并访问元素,即

x = requests[0] # dict

简单...我是 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 :