Files
dns-server/dns/fix_json.py
Alex Yang cdac4fcf43 update
2026-01-16 11:09:11 +08:00

84 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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("修复完成")