Получение ключей и значений из списка ответов API zabbix Python3 - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблема с работой с данными из zabbix.Я создаю запрос, как показано ниже:

requests = zapi.host.get({"output": ZabbixApiValues,"selectInventory":ZabbixApiValues, "filter": {"host": ["Cisco"]}}) 

ZabbixApiValues ​​- это список полей, которые мне нужно получить из zabbix: (список - это make в другой функции, которая сейчас не имеет значения)

['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 и создать запросы API к другой системев формате XML.Я знаю, что делать, но из этого ответа я не могу получить необходимые поля.Я ожидаю, что я получу только [ключ]: [значение] без точно jsons childm: 'hostid': '10460', 'description': 'This is testing host', 'host': 'Cisco','hostid': '10460', 'oob_ip': '', 'location': 'Tokyo', 'os': 'Linux Mint' может быть в качестве словаря.без "инвентаря".Тогда я мог бы получить ключи и значения и создать XML.

Теперь я могу получить строку со всеми данными или x ['инвентарь'] только с данными инвентаризации вместо всех полей.

Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 26 апреля 2019

Ответ Zabbix имеет тип списка, и затем вы конвертируете его в данные json, так что теперь это строка json, к которой вы не можете получить доступ к таким элементам, вам нужно загрузить данные json как

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

сейчасэто дикт, вы можете получить доступ к таким элементам, как

x[0]['description']

, но вы не знаете, почему вы это делаете, запросы относятся к списку типов, нет необходимости преобразовывать их в json, получать диктант из списка и получать доступ к элементам, т.е.

x = requests[0] # dict
0 голосов
/ 26 апреля 2019

просто ... Я новичок в 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 : 
0 голосов
/ 26 апреля 2019

печать (запросы [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': ''}}]
...