#python #json #cisco
#python #json #cisco
Вопрос:
Я хотел бы красиво распечатать файл json, в котором я мог бы видеть идентификаторы массива. Я работаю над коммутатором Cisco Nexus с NX-OS, который запускает Python (2.7.11). Просматриваем следующий код:
cmd = 'show interface Eth1/1 counters'
out = json.loads(clid(cmd))
print (json.dumps(out, sort_keys=True, indent=4))
Это дает мне:
{
"TABLE_rx_counters": {
"ROW_rx_counters": [
{
"eth_inbytes": "442370508663",
"eth_inucast": "76618907",
"interface_rx": "Ethernet1/1"
},
{
"eth_inbcast": "4269",
"eth_inmcast": "49144",
"interface_rx": "Ethernet1/1"
}
]
},
"TABLE_tx_counters": {
"ROW_tx_counters": [
{
"eth_outbytes": "217868085254",
"eth_outucast": "66635610",
"interface_tx": "Ethernet1/1"
},
{
"eth_outbcast": "1137",
"eth_outmcast": "557815",
"interface_tx": "Ethernet1/1"
}
]
}
}
Но мне нужно получить доступ к полю с помощью:
rxuc = int(out['TABLE_rx_counters']['ROW_rx_counters'][0]['eth_inucast'])
rxmc = int(out['TABLE_rx_counters']['ROW_rx_counters'][1]['eth_inmcast'])
rxbc = int(out['TABLE_rx_counters']['ROW_rx_counters'][1]['eth_inbcast'])
txuc = int(out['TABLE_tx_counters']['ROW_tx_counters'][0]['eth_outucast'])
txmc = int(out['TABLE_tx_counters']['ROW_tx_counters'][1]['eth_outmcast'])
txbc = int(out['TABLE_tx_counters']['ROW_tx_counters'][1]['eth_outbcast'])
Итак, мне нужно знать идентификатор массива (в данном примере нули и единицы), чтобы получить доступ к информации для этого интерфейса. Это кажется довольно простым только с 2 массивами, но представьте 500. Прямо сейчас я всегда копирую код json в jsoneditoronline.org где я могу видеть идентификаторы:
Есть ли простой способ сделать идентификаторы видимыми в самом python?
Комментарии:
1. Синтаксис JSON не позволяет печатать индексы массива. Это сделало бы JSON недопустимым / не подлежащим замене. Что вы могли бы сделать, так это пройти по этим массивам и добавить другое поле (например,
index
) к элементам, которые содержат индекс.2. Ну, я не буду изменять структуру json переменной ‘out’ itslef, я только хочу изменить печатную структуру.
3. Ну, то, что вы опубликовали, является действительным JSON. Изображение взято из инструмента, который берет данные из JSON и отображает их. Вы можете отобразить его любым удобным для вас способом, но содержимое файла должно быть в действительном формате JSON. Если вам не нужно загружать JSON позже, вы можете делать с ним все, что вам нравится, но
json.dumps
он предоставит вам только JSON.4. Хорошо, большое вам спасибо. Можете ли вы ввести aswer, чтобы я мог его принять?
Ответ №1:
Вы опубликовали допустимый JSON.
Изображение взято из инструмента, который берет данные из JSON и отображает их. Вы можете отобразить его любым удобным для вас способом, но содержимое файла должно быть в действительном формате JSON.
Если вам не нужно загружать JSON позже, вы можете делать с ним все, что вам нравится, но json.dumps()
он предоставит вам только JSON.