JSON 格式转换怎么搞?教你用 Python 轻松搞定 cpa.json/sub2api.json 转 codex.auth.json
最近在折腾各种自动化脚本和节点工具时,经常遇到配置文件格式不兼容的问题。这不,刚看到有朋友在求助,想把 cpa.json 或者 sub2api.json 转换成 codex.auth.json。这种情况其实在折腾党圈子里太常见了,毕竟不同的工具都有自己的“方言”,想要让它们互通有无,就得当个“翻译官”。
为什么会有这种需求?
很多时候,我们手头可能有一批通过某个工具(比如订阅转换类工具)生成的订阅节点配置,格式是 cpa.json 或者标准的 sub2api.json。但是我们想用的另一个核心应用(比如某个基于 Codex 的面板或客户端),它只认 codex.auth.json 这种特定的结构。
如果不懂点代码,面对一堆 "key": "value" 真的会头大。别慌,这种转换本质上就是“抠数据”和“换马甲”。
破解思路:先看看目标长啥样
Python 脚本编写环境示例
要写转换脚本,第一步不是写代码,而是对比。
- 看源文件:打开你的
cpa.json或sub2api.json,找到核心信息。通常包括节点的 IP/域名、端口、UUID(密码)、加密方式、协议类型等。 - 看目标文件:找一个现成的
codex.auth.json示例,看看它需要哪些字段。比如,它是不是把 UUID 放在了user_id字段里?还是把服务器地址放在了host里的某个嵌套对象下?
实操:用 Python 写个万能转换器
JSON 转 Excel 数据转换示意图
既然是 JSON 处理,Python 的 json 库是首选。下面我给大家写一个通用的模板,逻辑很简单,你只需要根据实际的字段名填空就行。
假设我们的源文件结构大概长这样(伪代码):
// source.json
[
{
"server": "1.1.1.1",
"port": 443,
"uuid": "a1b2-c3d4...",
"security": "tls"
}
]
而目标 codex.auth.json 需要长这样:
// target.json
{
"accounts": [
{
"address": "1.1.1.1",
"password": "a1b2-c3d4...",
"port": 443
}
]
}
转换脚本(convert.py):
import json
import sys
def transform(input_file, output_file):
try:
# 读取源文件
with open(input_file, 'r', encoding='utf-8') as f:
source_data = json.load(f)
# 初始化目标结构
target_data = {
"accounts": [] # 假设 codex.auth.json 的根节点下有个 accounts 列表
}
# 遍历源数据进行字段映射
# 注意:这里需要你根据实际 json 结构修改下面的 key 名称
for item in source_data:
new_item = {
"address": item.get("server"), # 映射 server -> address
"password": item.get("uuid"), # 映射 uuid -> password
"port": item.get("port"), # 映射 port
"sni": item.get("security", "none") # 映射可选字段
}
target_data["accounts"].append(new_item)
# 写入目标文件
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(target_data, f, indent=4, ensure_ascii=False)
print(f"转换成功!已生成 {output_file}")
except Exception as e:
print(f"出错啦:{e}")
if __name__ == "__main__":
# 简单的命令行调用:python convert.py input.json output.json
if len(sys.argv) >= 3:
transform(sys.argv[1], sys.argv[2])
else:
print("请提供输入和输出文件路径,例如:python convert.py sub2api.json codex.auth.json")
怎么调整适合你的情况?
上面只是个最简单的骨架。如果 cpa.json 结构很复杂(可能包含很多嵌套的 vnext 或者 settings),你需要用字典的方式一层层剥开。
举个例子:
如果 UUID 存在 item['settings']['vnext'][0]['users'][0]['id'] 这种恶心位置,代码里就写成:
uuid = item.get('settings', {}).get('vnext', [{}])[0].get('users', [{}])[0].get('id')
没有编程基础怎么办?
如果你实在不想写代码,这里有个“笨办法”但很有效:
- 找一个在线 JSON 格式化工具,分别把源文件和目标文件美化一下。
- 用 Excel 的“从 JSON 导入”功能,把这两个文件分别变成两个表格。
- 用 Excel 的
VLOOKUP或者直接复制列,把源表格的数据按照目标表头排列好。 - 把调整好的 Excel 另存为 CSV,再用在线工具转回 JSON。
虽然步骤多了点,但是可视化操作,不容易出错。
总结
像 cpa.json 转 codex.auth.json 这种需求,核心其实就是字段映射。市面上很难有现成的通用工具,因为每个人的 JSON 结构定义可能都在细微差别。掌握了 Python 这么几行代码,以后遇到任何 src.json 到 dst.json 的转换,你都能自己动手丰衣足食,不再需要求人啦!
希望这个思路能帮到正在纠结配置文件的你!如果有什么具体的字段拿不准怎么映射,也可以在研究一下目标软件的文档说明。

评论已关闭