import re with open('/root/dns/blocked-services-rules.json', 'r', encoding='utf-8') as f: content = f.read() # 从第230行开始,格式有问题 # 正确的格式应该是: # "ServiceName": { # "ServiceID": "...", # "Name": "...", # ... # } # 但是现在的格式是: # "ServiceID": "shopping", # "Amazon Streaming": { "ServiceID": "amazon_streaming", # "Name": "Amazon Streaming", # ... # 需要删除多余的 "ServiceID": "shopping", 这一行 # 并修复 "Amazon Streaming": { "ServiceID": "amazon_streaming", 这一行 lines = content.split('\n') # 读取前230行(第1-229行,索引0-228) fixed_lines = lines[:229] i = 229 # 从第230行开始(索引229) while i < len(lines): line = lines[i] # 检查是否是多余的 ServiceID 行 if re.match(r'^\s*"ServiceID":\s*"[^"]+",\s*$', line): # 跳过这一行 print(f"第{i+1}行: 跳过多余的ServiceID行: {line.strip()}") i += 1 continue # 检查是否是格式错误的服务名行 # 例如: "Amazon Streaming": { "ServiceID": "amazon_streaming", match = re.match(r'^\s*"([^"]+)":\s*\{\s*"ServiceID":\s*"([^"]+)",\s*$', line) if match: service_name = match.group(1) service_id = match.group(2) # 获取缩进 indent_match = re.match(r'^(\s*)', line) indent = indent_match.group(1) if indent_match else '' # 修复这一行 fixed_line = f'{indent}"{service_name}": {{' fixed_lines.append(fixed_line) print(f"第{i+1}行: 修复服务 '{service_name}'") i += 1 continue # 检查是否是空字符串键名 if re.match(r'^\s*"":\s*\{', line): # 查找接下来的几行中的 Name 字段 service_name = None for j in range(i + 1, min(i + 10, len(lines))): name_match = re.search(r'"Name":\s*"([^"]+)"', lines[j]) if name_match: service_name = name_match.group(1) break if service_name: # 获取缩进 indent_match = re.match(r'^(\s*)', line) indent = indent_match.group(1) if indent_match else '' # 替换空字符串键名为服务名称 fixed_lines.append(f'{indent}"{service_name}": {{') print(f"第{i+1}行: 修复空字符串键名为 '{service_name}'") i += 1 continue fixed_lines.append(line) i += 1 fixed_content = '\n'.join(fixed_lines) with open('/root/dns/blocked-services-rules.json', 'w', encoding='utf-8') as f: f.write(fixed_content) print("修复完成")