YAML 转 CSV:把对象数组拍平成 Excel 表格
把一份 YAML 对象数组转成 CSV 表格,列取所有键的并集,嵌套字段可选展开成多列,逗号分号 Tab 都支持,直接拖进 Excel 排序筛选透视。
YAML 转 CSV:把对象数组拍平成 Excel 表格
YAML 适合写配置,读起来也清爽,可一旦数据攒到几百条,想排序、筛选、做透视,它就帮不上忙了。这些事是表格的强项。把 YAML 对象数组转成 CSV,丢进 Excel 或 Google Sheets,你立刻拿到一张能用的表。本文讲清楚转换里几个容易翻车的点:列怎么对齐、嵌套字段怎么处理、分隔符为什么有时要换。
列表的每一项变成一行,键变成列
核心规则一句话说完:输入是一个 YAML 序列,里面每一项是对象;转换后每一项变成一行,表头取所有对象键的并集,顺序按键首次出现排。
举个具体例子,下面这段 YAML:
- name: 张伟
city: 北京, 朝阳
age: 30
- name: 李娜
city: 上海
role: 设计
转出来的 CSV 是这样:
name,city,age,role
张伟,"北京, 朝阳",30,
李娜,上海,,设计
注意两件事。第一,张伟有 age 没 role,李娜有 role 没 age,工具把键收齐成 name,city,age,role,缺的字段留空单元格,不会把后面的值挤错位。第二,北京, 朝阳 里有个逗号,输出按 RFC 4180 用双引号包了起来,所以它仍然是一个单元格,不会被分隔符切成两列。值里如果有双引号或换行,处理方式一样,引号会写成两个,跨行的备注也能原样转过去。
嵌套字段:塞进一格,还是摊成多列
真实的 YAML 很少是扁平的,经常有嵌套对象和数组。这里有两条路,看你接下来要干什么。
默认是把嵌套对象或数组 JSON 字符串化,塞进一个单元格。比如 tags: [前端, 工具] 会变成单元格 ["前端","工具"],整块保留,之后还能再解析回结构化数据。这条路适合你只是想搬运,后面还要转回去。
另一条路是打开「展开嵌套」。这时工具会把嵌套摊成多列:addr.city、addr.zip、tags[0]、tags[1]。如果你的目的是在表格里筛选、排序、做透视,务必打开这个开关。嵌套留成 JSON 文本的话,Excel 没法对它排序也没法透视,等于白搬。我自己第一次转一份 Ansible inventory 时就忘了开,对着满屏 {"port":8080,...} 的单元格发了半天呆,后来才反应过来该展开。
YAML 转 CSV 工具 这两种处理都在界面上一个开关切换,转之前先想清楚下游要的是表格分析还是数据搬运。
分隔符不是小事
逗号是默认,但不是万能。如果你的 Excel 地区设置把逗号当小数点(欧洲很多地方是这样),逗号分隔的 CSV 一打开就把整行塞进一格,列全糊在一起。这种情况把分隔符换成分号就好了。需要喂给某些只认 Tab 的导入器时,选 Tab 输出,也就是常说的 TSV。
还有编码这一关。文件是 UTF-8,中文或带重音的字若双击打开显示成乱码,别急着怀疑工具,用 Excel 的「数据 → 从文本/CSV」导入,把编码设成 UTF-8,字就正常了。
几个典型场景
把配置列表交给非工程同事改,是我用得最多的。功能开关、副本数这些值记在 YAML 里,产品同学只会用表格。转成 CSV 放进共享表格让对方改,改完用 CSV 转 YAML 工具 转回来,谁都不用为了改个数字去学缩进规则。
另一个是数据对比。逐行比两份 YAML 导出很痛苦,键的顺序和缩进总在飘。用同一个分隔符把两份都转成 CSV,列顺序是确定的,同样的数据永远生成同样形状的表,并排一放,一个 VLOOKUP 就告诉你哪几行变了。
如果你要的不是表格而是另一种结构化格式,可以走 YAML 转 JSON;反过来从 CSV 起步,也有 CSV 转 JSON 和 YAML 格式化 一并备着。
最后提醒
最常见的报错是喂进来的 YAML 不是对象列表。顶层只有一个标量(比如就一个 42)没有行也没有列,工具会直接报错。把数据包成一个映射序列,或者贴单个对象,它会变成一行的表。整个转换在浏览器本地跑,不上传任何东西,放心贴保密数据。唯一要注意:分享链接会把数据编进网址,涉及机密时用下载按钮发文件,别发链接。
Made by Toolora · Updated 2026-06-13