我如何指定 json 路径来获取所有对象



我正在尝试获取 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 的一部分,并获取其中的所有对象,但我总是得到第一个或第二个在"池地址范围"中通过"1"更改 json 路径"地址=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-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())

你绝对可以用更少的行来做到这一点,但代码是可读的,这对于你那里的这些疯狂的数据结构很重要。

相关内容

  • 没有找到相关文章

最新更新