最近在折腾各种自动化脚本和节点工具时,经常遇到配置文件格式不兼容的问题。这不,刚看到有朋友在求助,想把 cpa.json 或者 sub2api.json 转换成 codex.auth.json。这种情况其实在折腾党圈子里太常见了,毕竟不同的工具都有自己的“方言”,想要让它们互通有无,就得当个“翻译官”。

为什么会有这种需求?

很多时候,我们手头可能有一批通过某个工具(比如订阅转换类工具)生成的订阅节点配置,格式是 cpa.json 或者标准的 sub2api.json。但是我们想用的另一个核心应用(比如某个基于 Codex 的面板或客户端),它只认 codex.auth.json 这种特定的结构。

如果不懂点代码,面对一堆 "key": "value" 真的会头大。别慌,这种转换本质上就是“抠数据”和“换马甲”。

破解思路:先看看目标长啥样

Python code editing

Python 脚本编写环境示例

要写转换脚本,第一步不是写代码,而是对比

  1. 看源文件:打开你的 cpa.jsonsub2api.json,找到核心信息。通常包括节点的 IP/域名、端口、UUID(密码)、加密方式、协议类型等。
  2. 看目标文件:找一个现成的 codex.auth.json 示例,看看它需要哪些字段。比如,它是不是把 UUID 放在了 user_id 字段里?还是把服务器地址放在了 host 里的某个嵌套对象下?

实操:用 Python 写个万能转换器

JSON to Excel workflow

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')

没有编程基础怎么办?

如果你实在不想写代码,这里有个“笨办法”但很有效:

  1. 找一个在线 JSON 格式化工具,分别把源文件和目标文件美化一下。
  2. 用 Excel 的“从 JSON 导入”功能,把这两个文件分别变成两个表格。
  3. 用 Excel 的 VLOOKUP 或者直接复制列,把源表格的数据按照目标表头排列好。
  4. 把调整好的 Excel 另存为 CSV,再用在线工具转回 JSON。

虽然步骤多了点,但是可视化操作,不容易出错。

总结

cpa.jsoncodex.auth.json 这种需求,核心其实就是字段映射。市面上很难有现成的通用工具,因为每个人的 JSON 结构定义可能都在细微差别。掌握了 Python 这么几行代码,以后遇到任何 src.jsondst.json 的转换,你都能自己动手丰衣足食,不再需要求人啦!

希望这个思路能帮到正在纠结配置文件的你!如果有什么具体的字段拿不准怎么映射,也可以在研究一下目标软件的文档说明。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭