数据格式与代理协议
YAML 和 JSON 规定数据怎样写;代理协议规定连接双方怎样交换数据。配置还需要内核解释字段,例如某个 port 是监听端口还是远端端口。
一份配置还需要应用规定字段含义。例如 port 这个名字在某个配置里可能表示监听端口,在另一个对象里可能表示远端端口。格式规范只能说明它是一个键和一个值,不能决定它实际用在哪里。
因此查看“支持 YAML”之前,应先确认客户端调用什么内核、接收哪类配置,以及是否先进行转换。相关关系可见 客户端、内核与订阅的区别。
同一份数据的两种写法
下面把同一组数据分别写成 JSON 和 YAML,比较层级、列表和类型。它们是格式示例,不是某个代理客户端的完整配置。
{
"name": "本机演示",
"port": 1080,
"enabled": false,
"labels": ["测试", "本机"]
}对应的 YAML 可以用缩进表达层级,用短横线表达列表:
name: "本机演示"
port: 1080
enabled: false
labels:
- "测试"
- "本机"两种写法中 1080 是数字,false 是布尔值;加引号后的 "1080" 或 "false" 则是字符串。应用是否接受这些类型由字段要求决定。YAML 的缩进要用空格保持一致;标准 JSON 不包含注释和末尾多余逗号,某些程序允许扩展写法也不代表所有解析器都允许。
扩展名不会转换文件内容
把 demo.yaml 改成 demo.json,里面的文字不会变化。标准 JSON 解析器仍会读到 YAML;即使语法能解析,字段也要符合目标内核。
反过来,某些 YAML 解析器能读取 JSON 风格内容,也不说明它知道某个内核的配置字段。是否按扩展名选择解析器、是否接受多种格式,是具体程序的行为。应看当前版本文档,不靠“文件能打开”推断可导入。
导入前先用文本编辑器看内容:它是完整配置、仅含节点的提供者文件,还是一串分享链接?这些材料即使使用相同后缀,入口和用途也可能不同。一次只测试一份副本,保留原文件以便返回已知状态。
Clash、sing-box 与 Xray 的字段差别
Clash/mihomo 常用 YAML,sing-box 和 Xray 常用 JSON。后两者的入站、出站和路由字段也不同,迁移需要重新对应结构。
| 配置体系 | 典型字段形状 | 需要核对的内容 |
|---|---|---|
| Clash / mihomo | proxies、proxy-groups、rules | 节点、策略组与按顺序匹配的规则。 |
| sing-box | inbounds、outbounds、route | 入站与出站类型、标签、监听字段及路由动作。 |
| Xray | inbounds、outbounds、routing | 协议字段、入站与出站标签及路由规则对象。 |
例如 sing-box 入站使用 type,Xray 入站使用 protocol,监听端口的字段也不完全相同。只替换这几个名字仍不算完成迁移,因为 DNS、路由、传输与认证结构也要对应。Xray 命令支持的其他输入格式同样只改变表达容器,不会把另一内核的字段变成 Xray 字段。
按语法、字段和版本查报错
先读完整错误和附近行号,再看它属于语法、字段、版本还是资源引用。行号指向读取失败的位置,漏掉的符号可能在上一行。
- 语法层:检查 JSON 引号与逗号,或 YAML 的缩进、冒号和列表层级。行号一般提示读取在哪里失败,但真正缺失的符号可能在上一行。
- 字段层:确认文件属于这个内核,字段位于正确对象中,数字、字符串、列表和布尔值类型符合要求。
- 版本层:确认运行的实际内核版本,核对字段加入、弃用或改变的版本;客户端版本不能直接替代内核版本。
- 资源层:检查规则文件、证书、地理数据等引用是否存在,路径是相对于哪一个工作目录。
“未知字段”可能来自错误配置体系或版本差异;即使程序忽略了未知字段,目标功能也可能没有生效。保留完整错误和版本信息,避免一次删除多段配置后失去问题线索。
转换前列出需要保留的行为
普通 YAML 与 JSON 转换器主要改变数据写法,代理转换器才可能处理协议字段。迁移前列出必须保留的节点、DNS 和规则,再检查转换结果。
如果只转换出节点列表,原来的策略组、规则顺序、DNS 解析路径、TUN 设置和本地覆盖可能没有保留。客户端显示“导入成功”只能证明它接受了结果,不证明每个域名会走同一条路径。分流规则尤其要检查目标标签是否存在、最终规则是什么,参考 分流规则说明。
迁移前备份完整配置,列出必须保留的行为,转换后逐项对照。订阅链接和配置可能含访问令牌、节点凭据与内部域名,应优先用可信本地工具处理;在线工具的处理方式需要明确了解后再使用。
校验配置,再测试实际连接
保存文件后,先让对应内核读取并检查。下面分别是 sing-box 和 Xray 的命令,只运行与你的配置匹配的一条。
sing-box check -c ./config.json
xray run -test -config ./config.json检查模式不会启动本例中的代理进程或调整系统代理。程序不在 PATH 时,Linux/macOS 使用实际文件路径,Windows PowerShell 可用 .\sing-box.exe 或 .\xray.exe。检查成功仍不能证明远端服务可达。
- 确认实际加载的是刚检查的文件,启动后没有重复监听或端口冲突。
- 对你需要访问的域名做一次请求,确认客户端日志显示预期规则与出站。
- 分别核对必需的 DNS、IPv4/IPv6 与 UDP 行为,按实际需要测试这些功能。
- 升级后重跑同一组最小案例;出现差异时可以恢复备份与原版本。
具体可运行示例见 sing-box 指南与 Xray-core 指南。两篇都提供了完整本机配置与请求命令。
常见问题
YAML 和 YML 是两种不同格式吗?
通常不是,.yaml 与 .yml 是 YAML 文件常用的不同扩展名。具体程序是否接受两个后缀仍由它的读取规则决定,文件内容与字段兼容性需要另外确认。
JSON 能添加 // 注释吗?
标准 JSON 不允许注释。一些程序支持 JSONC 或自行移除注释,但不能把这种扩展行为当作所有 JSON 解析器的通用规则。
为什么复制后看起来一样,YAML 却报错?
缩进空格、制表符、全角标点或上一行结构可能发生变化。用能显示不可见字符的编辑器检查错误行附近,保留统一空格缩进。
参考资料
原理和协议定义可查以下标准与官方文档。文中的流程图由 AFQKit 绘制。