我以前从未使用过 JSON 文件,并且找不到使用 Python 从文件中获取某些字段的方法。相关文件是 Azure 服务标记文件,其中按区域列出了所有 Azure 服务并列出了所使用的 IP 地址。最新文件可以在这里找到https://www.microsoft.com/en-us/download/details.aspx?id=56519但下面是一个示例(超过 70,000 行)。
{
"changeNumber": 135,
"cloud": "Public",
"values": [
{
"name": "ActionGroup",
"id": "ActionGroup",
"properties": {
"changeNumber": 7,
"region": "",
"regionId": 0,
"platform": "Azure",
"systemService": "ActionGroup",
"addressPrefixes": [
"13.66.60.119/32",
"13.66.143.220/30",
"13.66.202.14/32",
"13.66.248.225/32",
"13.66.249.211/32",
"13.67.10.124/30",
"13.69.109.132/30"
],
"networkFeatures": [
"API",
"NSG",
"UDR",
"FW"
]
}
},
{
"name": "ApplicationInsightsAvailability",
"id": "ApplicationInsightsAvailability",
"properties": {
"changeNumber": 2,
"region": "",
"regionId": 0,
"platform": "Azure1",
"systemService": "ApplicationInsightsAvailability",
"addressPrefixes": [
"13.86.97.224/27",
"13.86.98.0/27",
"13.86.98.48/28",
"13.86.98.64/28",
"20.37.156.64/27",
"20.37.192.80/29"
],
"networkFeatures": [
"API",
"NSG",
"UDR",
"FW"
]
}
},
]
}
我想做的是“如果regionId在27到30之间,则打印addressPrefixes”。我尝试过使用 jsonpath_rw、jsonpath_rw_ext、pandas 以及可能的其他一些方法来实现此目的(我已经偶尔关注这个问题有一段时间了)。
此代码将打印唯一区域 ID 的列表(使用 jsonpath_rw_ext):
with open(r'C:\Temp\ServiceTags_Public_20210215.json') as f:
data = json.load(f)
listRegionId = []
for regionId in jp.match("$..properties.regionId", data):
if regionId not in listRegionId:
listRegionId.append(regionId)
print(listRegionId)
如果我将 if 语句更改为 if regionId == 30:
那么我如何引用 addressPrefixes 字段?
非常感谢
编辑添加我是一名网络工程师,可以使用一些 Python,因此我的代码不是最好的
最佳答案
我希望这是你想要的:
import json
with open('test.json', 'r') as f:
data = json.load(f)
for element in data['values']:
region_id = element['properties']['regionId']
if 27 < region_id < 30:
print('RegionId: ' + str(region_id))
print(element['properties']['addressPrefixes'])
我在您附加的 json 数据上尝试了它,无法显示整个输出,所以这里是它的示例:
RegionId: 29
['2603:1020:305:402::178/125']
RegionId: 28
['2603:1020:605:402::178/125']
RegionId: 29
['13.87.122.84/31', '13.87.123.144/28', '2603:1020:305:402::140/124']
RegionId: 28
['51.137.136.0/32', '51.140.210.84/31', '51.140.211.176/28', '2603:1020:605:402::140/124']
RegionId: 29
['2603:1020:305:402::a0/123']
关于python - 使用 Python 从另一个字段满足条件的大型 JSON 文件中解析字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67058855/