我是如何指定一个json路径来获取所有对象的

2024-06-16 17:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取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"
                        }
                    ]
                }
            ]

这是我在“pool address range”中尝试访问的json片段,并获取其中的所有对象,但我总是在“pool address range”中通过“1”更改json路径“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']

预期结果必须是“池地址范围”中的所有对象,并且只进行一次迭代,这是可能的吗


Tags: 对象name路径jsondataaddressservicerange
2条回答

如果您试图获取'pool-address-range-list'中的所有地址,那么可以在循环中使用列表理解。从技术上讲,这是另一个循环,但它似乎是你的最佳选择

addresses = [a['data'] for a in 
              item['pool-address-range-list'][0]['pool-address-range']]

取决于你想要的是一个集合还是一个列表,这里有一个集合:

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())

你当然可以用更少的行来完成,但是代码是可读的,这对于那些疯狂的数据结构很重要

相关问题 更多 >