Как я указал путь JSON, чтобы получить все объекты - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь получить все объекты пути json, но не могу найти способ ссылаться на "все объекты" в пределах одного пути

{
    "sfw-per-service-set-nat-pool": [
        {
            "pool-name": [
                {
                    "data": "11111111"
                }
            ],
            "translation-type": [
                {
                    "data": "2222222222"
                }
            ],
            "pool-address-range-list": [
                {
                    "pool-address-range": [
                        {
                            "data": "1.1.1.1-1.1.1.1"
                        },
                        {
                            "data": "2.2.2.2-2.2.2.2"
                        }
                    ]
                }
            ]

Это фрагмент jsonя пытался добраться до «pool-address-range и получить все объекты там, но я всегда получаю первое или второе, меняя путь json на« 1 »в« pool-address-range »» address = item ['pool-address-range-list '] [0] [' pool-address-range '] [1] [' data '] "

import json

with open('dd.json') as f:
 data = json.load(f)

for item in data['sfw-per-service-set-nat-pool']:
 name = item['pool-name'][0]['data']
 address=item['pool-address-range-list'][0]['pool-address-range'][0]['data']
 block= item['port-blocks-in-use'][0]['data']
 mblock= item['max-port-blocks-used'][0]['data']

Ожидаемым результатом должны быть все объекты в' pool-диапазон адресов 'с одной итерацией это возможно?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Если вы пытаетесь получить все адреса в 'pool-address-range-list', вы можете использовать понимание списка внутри цикла. Технически это еще один цикл, но он кажется вам лучшим вариантом.

addresses = [a['data'] for a in 
              item['pool-address-range-list'][0]['pool-address-range']]
0 голосов
/ 10 октября 2019

Зависит, если вы хотите набор или список, вот для набора:

result = set()
for pool_address_range in item["pool_address_range_list"]:
    for data_list in pool_address_range["pool-address-range"]:
        result.extend(data_list.values())

Вы можете определенно сделать это в несколько строк, но этот код читабелен, что важно с этими сумасшедшими структурами данных, которые выесть там.

...