Clash 报错「proxies 必须是数组」是什么意思,怎么改
Clash 或 mihomo 提示 proxies 不是数组、无法解析节点列表时,问题几乎都出在 YAML 的短横线和缩进上。本文说明这个报错的确切含义、四种常见成因,以及每种情况的正确写法。
本文目录(5 节 · 约 2 分钟) +
- 01 这个报错到底在说什么
- 02 四种常见成因
- 03 怎么快速定位
- 04 连带会遇到的问题
- 05 小结
一句话结论:这个报错的意思是 proxies: 下面写成了「一个值」,而 Clash 期待的是「一串值」。 在 YAML 里,一串值的写法是每项前面加一个短横线加空格(- )。缺了短横线、缩进层级不对、或者把节点分享链接直接粘进去,都会触发它。
这个报错到底在说什么
Clash 的配置里,proxies 是节点列表。列表在 YAML 里叫序列(sequence),必须写成这样:
proxies:
- name: 香港01
type: ss
server: hk1.example.com
port: 443
- name: 日本01
type: trojan
server: jp1.example.com
port: 443
注意两件事:每个节点的第一行以 - 开头,同一个节点的其余字段与 name 左对齐。解析器看到 - 才知道「这里开始了列表的一项」。
如果写成下面这样,proxies 的值就变成了一个普通字符串,而不是列表:
proxies: 香港01
或者变成一个映射(键值对),同样不是列表:
proxies:
name: 香港01
type: ss
两种情况客户端都会报「proxies 必须是数组 / 应为序列 / 无法解析」之类的错误,具体措辞各客户端不同,但说的是同一件事。
四种常见成因
一、复制配置时漏掉了短横线
这是最常见的。从网页或聊天记录复制片段时,行首的 - 容易被吞掉,尤其是复制的内容经过了某些编辑器的自动格式化。检查每个节点的第一行是不是都以 - 开头——只有第一行需要,后续字段不要加。
二、把节点分享链接直接粘进了 proxies 下面
proxies:
- vmess://eyJ2IjoiMiIsInBz...
这样写不行。vmess:// 这类分享链接不是 Clash 配置格式,Clash 不认识它们。分享链接是给客户端「导入」用的,而配置文件里需要的是展开后的字段(name、type、server、port 等)。
如果你手上只有分享链接,可以先用节点链接解析器把它解开看清里面有什么,再手写成配置格式;或者直接把链接导入客户端,让客户端自己转换。
三、缩进层级错了
proxies:
- name: 香港01
type: ss
这样其实是合法的 YAML——短横线可以和 proxies 左对齐。但如果你混用了两种风格,或者某个节点多缩进了两格,解析结果就会跑偏:
proxies:
- name: 香港01
type: ss
- name: 日本01 # 错:这个短横线缩进太深,成了上一个节点的子项
type: trojan
建议全文统一用「短横线缩进两格」的风格,不要在同一份配置里换来换去。
四、proxies 键重复出现了两次
proxies:
- name: 香港01
type: ss
# ……中间隔了很多行……
proxies: []
YAML 里同层的键重复时,后面的会覆盖前面的。如果第二个 proxies 是个空列表或者写错了类型,前面辛苦写的节点就全没了。这种情况通常发生在把两份配置拼在一起的时候。
怎么快速定位
肉眼逐行找缩进很累,而且 Tab 和空格看起来一模一样。把配置粘进配置校验器,它会直接告诉你是第几行出的问题、这一行为什么不合法。它查的不只是 YAML 语法,还包括 Clash 特有的结构问题——比如节点缺少必需字段、策略组引用了不存在的节点名。
工具在你的浏览器里运行,配置不会上传。
连带会遇到的问题
proxies 修好之后,常常紧接着冒出第二个错误:策略组引用了不存在的节点。原因是你刚才改动节点时顺手改了 name,而 proxy-groups 里还写着旧名字。Clash 对节点名的匹配是严格的——大小写、空格、emoji 都算数,「香港01」和「香港 01」是两个不同的名字。
另一个高频连带问题是 rules 最后没有 MATCH 兜底。没有它,未命中任何规则的流量走什么策略取决于客户端默认值,不同客户端不一致,表现就是「大部分网站正常,个别网站莫名其妙不走代理」。
小结
proxies报错基本等于「少了短横线」或「缩进不对」- 分享链接不能直接写进配置,那是两种不同的格式
- 同层重复的键会静默覆盖,拼接配置时尤其要小心
- 与其肉眼找,不如把配置粘进校验器让它指行号
相关文章
YAML 缩进明明对齐了却报错?多半是 Tab 混进来了
Clash 配置提示缩进不一致、mapping items 未对齐,但肉眼看每一行都对得整整齐齐——这种情况几乎都是 Tab 和空格混用。本文说明 YAML 为什么禁止 Tab 缩进、怎么在编辑器里揪出它,以及另外两种视觉上看不出的缩进问题。
「策略组引用了不存在的节点」——名字对不上的四种情况
Clash 启动失败提示策略组里的某个节点找不到,本质是 proxy-groups 里写的名字和 proxies 里的 name 没有完全一致。本文列出四种容易忽略的不一致来源,以及换订阅后批量失效的处理办法。
rules 最后为什么一定要写 MATCH,不写会怎样
MATCH 是 Clash 规则列表的兜底项,决定没有命中任何规则的流量走哪里。不写它不一定报错,但会导致「大部分网站正常、个别网站莫名其妙不走代理」这类难查的问题。本文说明它的作用、白名单与黑名单两种写法,以及规则顺序为什么重要。