JSON转YAML转换器

把左侧的 JSON 粘进来,本页用原生 JavaScript 解析后再序列化成 YAML,保留对象、数组、字符串、数字、布尔与 null 的层级,用 2 空格缩进。全部在浏览器里完成,不调用任何后端接口,不上传你的数据。

转换口径:先用 JSON.parse 解析,再递归序列化;对象用缩进块、数组用「- 」列表、字符串按需加双引号、数字与布尔原样输出。演示默认一个含嵌套与数组的对象。

使用方法

JSON转YAML转换器是「粘 JSON、点转换、拿 YAML」三步:

  1. 「JSON 输入」粘贴或手写的 JSON,演示值是一个含 name、version、tags 数组与 owner 嵌套对象的小例子。
  2. 点「转换为 YAML」或在输入框按 Ctrl/Cmd+Enter,右侧出现 YAML;非法 JSON 会在红框里指出错误原因。
  3. 点「复制 YAML」整段拿走,或「导出 .yaml」存成文件;想换例子点「载入示例」。

JSON转YAML转换器能解决什么

它把「机器友好的 JSON」变成「人更好读的 YAML」,适合三类场景:

  • 配置文件可读化:Kubernetes、Docker Compose、CI 流水线多用 YAML,从接口导出的 JSON 配置贴进来一键变 YAML,缩进层级一目了然。
  • 教学与对照:学序列化时,对比同一个对象在 JSON 与 YAML 下的写法,理解「对象/数组/标量」如何对应;演示对象的 owner 嵌套在 YAML 里就是两层缩进。
  • 本地安全转换:敏感配置(密钥、内网地址)不想过第三方网站,纯本地转换避免泄露,刷新即清空。

本页不做的事:不做 YAML 转回 JSON(那是另一个方向);不展开 YAML 锚点 & 与引用 *(输入若含会按普通字符处理);不压缩或美化 JSON。它只做 JSON→YAML 这一件事。

原理和变量

① 用了哪个具体函数:解析用浏览器内置 JSON.parse,序列化是本页手写的递归函数 toYaml(value, indent):按值是对象、数组还是标量分别处理,不用任何库。

② 关键参数为什么这样取:用 2 空格缩进而非 Tab,是因为 YAML 官方推荐空格、Tab 在 YAML 里不参与缩进;数组用「- 」前缀、对象用「key: 」前缀,是 YAML 块结构的既定写法。

③ 遵循哪个标准:输出符合 YAML 1.1/1.2 的通用子集(块映射、块序列、双引号标量),可被主流解析器(PyYAML、Go yaml、js-yaml)读回;未使用锚点、多文档等高级特性以保证兼容。

④ 输入怎么变成输出:演示对象先解析成内存结构,再递归打印;tags 数组渲染成四行「- 」列表,owner 对象在 name 同级下缩进两格,version: 2 原样、stable: true 原样。

⑤ 边界与阈值:空输入会提示先粘贴;非法 JSON 抛出 SyntaxError 并显示 message;顶层可以是对象、数组甚至单个标量(字符串/数字)。极深嵌套受调用栈限制,但正常配置远不到上限。

⑥ 常见误用的正确解释:YAML 里 yes/no/on/off 可能被解析成布尔,所以本页对这类字符串强制加双引号避免歧义;数字字符串(如 "007")也会加引号,防止被读成整数 7。

完整示例(数值仅作演示)

输入演示 JSON,输出得到(格式示意):

  • name: 柳泉工具
  • version: 2
  • stable: true
  • tags: 后接四行 - json / - yaml / - converter
  • owner: 下缩进两格写 team: newtools 与 members: 5

这段输出与右侧默认转换结果一致,可和下方语法对照表对照每种类型的写法。

输入范围与对照表

JSON转YAML转换器的对照表列出常见 JSON 类型在 YAML 下的写法,帮你预判输出形态:

JSON 类型 → YAML 写法示例
JSON 类型YAML 写法说明
字符串(普通)name: 柳泉工具无特殊字符可裸写
字符串(含冒号)"key: value"含冒号空格强制加引号
数字version: 2原样输出
布尔stable: true小写 true/false
nullnote: null小写 null
数组(块式)- json 换行 - yaml每项一行,减号空格
对象缩进 2 空格key: 后换行缩进
空对象{}行内空映射
空数组[]行内空序列
多行字符串双引号内 \n换行转义,不丢内容
yes/no 字符串"yes" 加引号防被当布尔
数字字符串"007" 加引号防被当整数 7

对照表说明:YAML 的「隐式类型」是最大坑——看起来像数字的会成数字、像 yes 的会成布尔,所以本页对有歧义的字符串一律加双引号,确保 round-trip 不改义。

结果边界和舍入

舍入与精度:数字按原值输出,不做四舍五入;浮点如 0.1 在 YAML 里仍是 0.1,不会变成 0.10000000000000001,因为直接取字符串。

什么时候会拒绝转换:输入为空会提示先粘贴;JSON 不合法(括号不配对、键没引号、尾逗号)会显示 SyntaxError 信息,逐项指出问题;修正后再点转换即可。

缩进与兼容:严格 2 空格缩进、不用 Tab;输出是 YAML 通用子集,可被 PyYAML、js-yaml、Go yaml 等标准解析器读回。

结果性质:这是无损结构化转换(类型与层级不变),只是表示法从花括号换成缩进;如需反向或再加工请用对应工具。

常见问题

转换后数字变成字符串了吗?

不会。JSON 里的数字在 YAML 里仍是数字(如 version: 2)。只有「长得像数字或布尔的字符串」(如 "007"、"yes")会被强制加引号,防止被误读成其他类型。

我的 JSON 报错了怎么办?

红框会显示浏览器的 SyntaxError 信息,通常是括号不配对、对象键没加双引号、或多了尾逗号。按提示修正后重新点「转换为 YAML」即可。

支持 YAML 转回 JSON 吗?

本工具只做 JSON→YAML 单向。需要反向请用专门的 YAML 解析工具,避免混淆方向导致格式错乱。

数据会上传到服务器吗?

不会。解析与序列化全在浏览器本地用原生 JS 完成,刷新即清空,不发起任何网络请求,敏感配置可放心处理。

缩进为什么用空格不用 Tab?

YAML 规范规定缩进只能用空格,Tab 不被当作缩进字符,混用会导致解析失败。本页统一用 2 个空格,兼容性最好。

能处理很大的 JSON 吗?

能,但受浏览器内存与渲染限制。几 MB 的配置一般没问题;超大文件建议分段或本地脚本处理,避免文本框卡顿。

数组和对象混嵌套会乱吗?

不会。递归序列化会按层级逐级缩进,数组里的对象、对象里的数组都能正确展开,演示对象的 owner 嵌套就是例子。

导出的 .yaml 能直接用吗?

能。点「导出 .yaml」得到标准 UTF-8 文本文件,可直接当作配置文件使用;注意 YAML 对缩进敏感,勿手动改用 Tab。

相关工具