⭐ 觉得好用?收藏备用,下次直接打开
YAML 缩进
JSON 缩进
分隔符
嵌套处理
根节点
数组行
缩进
等待输入
输入
输出

YAML / CSV / XML 互转 把四种常见数据格式在浏览器本地互相转换,内部以 JSON 作为中间表示(IR)——源格式先解析成 JS 对象,再按目标格式序列化出去。这样 4 种格式两两之间共 12 条方向都走同一条管道,行为一致。

底层依赖

格式说明
YAMLyamlYAML 1.2,支持注释/锚点(解析时展开)
CSVpapaparse容错、类型推断、多种分隔符
XMLfast-xml-parser纯 JS,解析 + 生成一体,属性按 @ 前缀
JSON原生JSON.parse / JSON.stringify

嵌套 → CSV 策略

CSV 不能表达嵌套,工具提供两种方式。默认扁平化——user.nameuser.addr.city 各为一列,反向解析按 . 还原结构;另一种是保留为 JSON 字符串,嵌套值原样塞进单元格(适合下游还要用代码解析的场景)。数组元素默认用 | 连接原始值。

XML 根节点问题

XML 必须唯一根,JSON 数组没有。生成 XML 时若源是数组,会自动包一层 <root><row>...</row></root>,根名和行名都可在选项里改。

快捷键

⌘/Ctrl + Enter 触发一次转换(实时模式开着时也可手动强制)。支持拖拽文件到输入框,按扩展名自动切源格式。

📍使用场景

  • 把 YAML 配置喂给老系统现代应用喜欢 YAML,老服务可能只吃 JSON 或 XML。一键互转省掉手写解析。
  • 把接口返回的数据下载成表格后端返回 JSON 数组时,转成 CSV 直接拖进 Excel 或飞书多维表分析。
  • 把产品交来的 Excel 灌回代码CSV → YAML / JSON 后粘到配置文件里,不用再对着表格手敲缩进。
  • 清洗第三方 XML 数据源XML → JSON 后配合 JSON 工具/Schema 校验,比直接啃 XML 清爽得多。

常见问题

为什么 CSV 只能装扁平数据?能完整往返吗?

CSV 本质是二维表格,没有嵌套语法。工具默认"点号路径"扁平化:{ user: { name: "Alice" } } → 列名 user.name,反向按 . 拆回去,嵌套对象完全可往返对象数组或嵌套复杂值会被 JSON.stringify 塞进单元格;开启"类型推断"时工具会在读回时尝试 JSON.parse,也能往返。但基本类型数组["a","b","c"])默认用 | 连接便于阅读 —— 这一步不可逆,CSV 再转回去会变成字符串 "a|b|c"。若需要基本数组也可往返,切"JSON 字符串"模式,数组会编码为 ["a","b","c"] 写入单元格。

为什么我的 XML 转完多了一层 <root> / <row>

XML 必须有唯一根节点,JSON/YAML 数组没有这个约束。工具在序列化时会自动包一层:数组 [a, b]<root><row>a</row><row>b</row></root>。根节点名和数组元素名都可以在选项里改(默认 root / row)。反向解析时如果输入本来就有单一根节点,不会再套一层。

CSV 里 "123" 会被当成数字吗?

默认会。工具启用了 papaparse 的 dynamicTyping,会自动把 123 → 数字、true/false → 布尔、空字符串 → null。如果字段必须保留为字符串(比如身份证号、手机号前导零),关掉"类型推断"即可。

支持多大文件?

硬上限 5 MB,超过会在打开文件时拒绝。实际上到 1–2 MB 的 YAML/XML 解析在浏览器里已有感知延迟——如果文件更大,建议先在本地用脚本转换。

YAML 里的锚点和别名(& / *)会保留吗?

解析时会被 yaml展开成具体值,所以转回 YAML 后不再是引用形式。如果需要保留结构,YAML → YAML 这条路径工具也没法还原原样——本质上这是解析环节就丢失的信息。

转换会把我的数据上传吗?

不会。yamlpapaparsefast-xml-parser 三个库全部在浏览器本地运行,数据不出机器。浏览器关闭后,localStorage 只保留最近一次的输入作为草稿,可以随时清空。

XML 里的属性去哪了?

属性会按 @attr 的 key 形式映射到 JSON/YAML。比如 <user id="1">Alice</user> 解析为 { user: { "@id": 1, "#text": "Alice" } }。反向生成时,以 @ 开头的键会被还原成属性。这个约定是 fast-xml-parser 的默认,可以在输出里看到效果。