Python: Симпатичная печать json-файла с идентификаторами массива

#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.