2026-09-11 · 订阅管理 · 约 8 分钟

V2Ray 订阅格式全解:Base64 订阅、原生 JSON 与分享链接互转

解释 Base64 订阅、原生 JSON 配置与 vmess:// 等分享链接三种格式的结构差异,以及在客户端里相互转换的方法。

本文速览

先辨认拿到的是订阅地址、分享链接列表,还是完整内核配置,再选择导入入口。本文适合遇到“解码后为什么还是链接”“JSON 为什么不能直接当订阅”的用户:从 v2rayN 的订阅分组与剪贴板导入开始,说明 Base64 编解码、节点导出和原生 JSON 的转换边界,并给出本地处理与报错排查方法。

三种格式的区别:订阅负责分发,JSON 负责运行

先分清“获取地址”和“返回内容”。订阅地址通常是带访问凭据的 HTTPS URL,客户端访问后才取得节点数据。Base64 订阅是常见的返回内容格式,不是代理协议,也不意味着所有订阅都采用同一种编码。把订阅地址本身做 Base64 解码,通常得不到节点。

材料常见结构导入用途
Base64 订阅正文多条分享链接按行排列,再整体编码通过订阅更新批量取得节点
分享链接vmess:// 或 vless:// 等协议前缀通过剪贴板导入节点参数
原生 JSON 配置inbounds、outbounds、routing 等字段交给匹配的内核运行

分享链接主要描述一个远端连接:地址、端口、身份凭据、传输方式及 TLS 参数。完整 JSON 还可以包含本地监听、DNS、分流规则和多个出站。因此,节点能够导出为分享链接,不等于整套运行配置能够完整装进链接。

Base64 解码:先解外层,再识别协议

传统 Base64 订阅可以理解为两层结构:外层把整份链接列表编码,内层每一行仍然遵循各自协议的分享格式。去掉外层后,看到 vmess:// 很正常;不要继续对所有链接使用同一种解码规则。

下面的 JavaScript 仅演示本地 UTF-8 编解码。输入 节点 时,编码结果为 6IqC54K5;这是一段字符测试,不是可连接的节点。处理真实订阅时,只在可信的本地环境中操作,不要把含令牌的内容提交到在线转换服务。

function decodeBase64Utf8(input) {
  let value = input.trim().replace(/\s+/g, "")
    .replace(/-/g, "+").replace(/_/g, "/");
  value = value.padEnd(Math.ceil(value.length / 4) * 4, "=");
  const bytes = Uint8Array.from(atob(value), char => char.charCodeAt(0));
  return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}

function encodeBase64Utf8(text) {
  const bytes = new TextEncoder().encode(text);
  let binary = "";
  for (const byte of bytes) binary += String.fromCharCode(byte);
  return btoa(binary);
}

console.log(encodeBase64Utf8("节点"));       // 6IqC54K5
console.log(decodeBase64Utf8("6IqC54K5"));   // 节点

解码成功只代表编码层可读。结果如果是登录页面、到期提示或其他 HTML,就没有得到有效节点列表。此时继续编码或换扩展名不会修复订阅,需要回到订阅地址和访问权限检查。

v2rayN 导入:订阅地址与剪贴板分开处理

需要后续更新节点时,优先添加订阅分组;只拿到一条或多条分享链接时,使用剪贴板导入。以下按 v2rayN 中文界面的菜单名称说明,不同桌面界面可能调整按钮位置,括号与空格也可能略有差异,应以实际菜单为准。

  1. 辨认输入

    HTTPS 获取地址用于订阅分组;以 vmess://、vless:// 开头的内容用于节点导入。不要把完整 JSON 粘贴进订阅地址栏。

  2. 添加分组

    打开「订阅分组」→「订阅分组设置」,新增分组,填写备注和订阅地址,保存。地址中的查询参数与访问令牌需要完整保留。

  3. 更新订阅

    在「订阅分组」菜单选择「更新全部订阅(不通过代理)」。若直连请求失败,且已有可用代理连接,再尝试「更新全部订阅(通过代理)」,查看更新日志中的结果。

  4. 导入链接

    对于分享链接,先复制完整文本,再打开「服务器」→「从剪贴板导入批量URL」。多条链接按行排列;常见桌面界面也可用 Ctrl+V 执行剪贴板导入。

  5. 检查参数

    打开导入后的节点编辑窗口,核对地址、端口、传输协议及 TLS 设置。导入成功不代表连接可用,随后查看核心日志,确认是否存在字段不支持或握手失败。

安卓端也需要区分这两种入口:v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核。能读入同一份链接列表,不代表两者都支持其中每一种传输参数。尤其遇到 VLESS、REALITY 等组合时,应先确认目标客户端及内核支持情况,而不是反复改变 Base64 外层。

分享链接与原生 JSON:哪些能转,哪些会丢

分享链接转 JSON 的本质是字段映射,不是把文本外面加一对大括号。客户端读取链接,建立节点记录,再按所选内核生成运行配置。反向导出时,通常只能取出某个出站对应的连接参数,不能自动携带整套 DNS、路由与本地监听。

保留原始订阅

推荐

保存获取地址并用订阅分组更新,能够继续接收远端节点变更。订阅令牌需要按访问凭据保护。

适合:日常维护多个节点、需要持续更新

导出分享链接

在节点列表选中记录,通过右键菜单中的分享 URL 导出项复制到剪贴板。得到的是节点快照,不会附带原订阅的更新关系。

适合:临时迁移少量节点、检查连接字段

保留完整 JSON

保留多个出站、路由标签和 DNS 设置,交给对应内核读取。跨内核使用前需要核对字段语义,不能只改文件名。

适合:自定义分流、固定本地入站配置

转换前先备份完整配置

若迁移目标只是节点连接,导出分享链接即可;若还要保留 DNS 与分流,另存原生 JSON,并逐项检查目标内核支持的字段,不要用链接导出替代配置备份。

下面是一份结构演示配置,只包含监听 127.0.0.1:10808 的 SOCKS 入站与直连出站,不包含远端代理服务器,也不应作为代理节点导入。它说明完整 JSON 可以根本没有可转换成 VMess 或 VLESS 链接的对象。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

确实需要加载完整配置时,使用 v2rayN「服务器」→「添加自定义配置服务器」这类专用入口,按界面选择配置文件和匹配内核。自定义配置中的监听端口可能与现有实例冲突;日志出现地址已被占用时,先停止冲突实例或调整端口,而不是修改节点身份信息。

把链接列表重新编码为订阅正文

已经导出多条分享链接时,可以按“一行一个链接”的方式组成文本,再对整个 UTF-8 文本进行 Base64 编码。这能生成传统订阅正文,但不会自动生成可更新的订阅地址。地址仍需要一个可信的 HTTPS 服务返回这份正文。

  1. 保留每条链接的协议前缀、查询参数与备注,不要手动删掉看似重复的 TLS 或传输字段。
  2. 使用换行符 \n 连接各条链接,不要插入项目符号、引号、JSON 数组括号或表格分隔符。
  3. 对完整文本编码一次;不要把每条完整分享链接先单独编码,再拼成另一份无法识别的列表。
  4. 本地解码一次,确认能逐行还原原文,再用目标客户端试导入。核对节点数量和关键字段,而不只看成功提示。

从完整 JSON 批量提取链接时,还要处理多个出站、标签引用和传输字段映射。目标分享格式无法表达的字段必须另行记录。转换工具输出了链接,只能说明完成了部分序列化,不能证明与原配置行为一致。

导入失败排查:先检查内容,再检查内核

解码后为什么还是 vmess://?

这说明外层订阅编码已经去掉。将这些链接按行复制,使用「服务器」→「从剪贴板导入批量URL」。如果只是查看 VMess 字段,再单独解码该链接前缀后面的部分,不要把整行连同前缀一起解码。

导入提示成功,列表却少了几个节点?

先将解码后的非空链接行数与实际导入数量对照,再查看失败行的协议前缀和字段。某些记录可能因重复、格式错误或协议不支持而未新增;不要仅凭数量下降判断订阅损坏。

JSON 能打开,为什么客户端不接受?

能被 JSON 解析器读取,只表示语法有效。先检查顶层是否有 inbounds、outbounds,再确认是否使用自定义配置入口及匹配内核。VMess 分享数据中的 add、id 不能直接当作完整运行配置。

更新订阅时返回 403 或超时怎么办?

403 通常需要检查授权、令牌或服务端访问策略;超时则检查网络与解析。保留原始地址全部参数,已有可用节点时尝试「更新全部订阅(通过代理)」。若响应实际为错误页面,重新编码该页面没有意义。

排错时固定顺序:先确认订阅请求取得有效正文,再确认分享链接能解析,最后检查运行内核与连接参数。把“下载失败”“格式不支持”“连接失败”分开记录,才能避免在错误的层级反复转换。

下载v2rayN按平台选择客户端