企评社

YAML 转换

YAML ⇄ JSON · YAML → Properties · 支持多文档、锚点与行列报错

转换全部在你的浏览器里完成,配置内容不上传、不留存
转换不是无损的,先知道会丢什么。 YAML 的注释在 JSON / Properties 里没有任何对应位置,转换后一定丢失;锚点与别名(&x / *x)在解析阶段就展开成真实值,转换后每个引用点都是独立副本(数据等价,体积变大);缩进、引号风格、块标量(| 与 >)这些书写形式不会原样保留;YAML 里的日期会被识别成时间戳、转成 ISO 字符串,.inf / .nan 因为 JSON 没有这两个值会变成 null如果你要的是"把 YAML 存回去还跟原来一模一样",本页做不到,任何转换工具都做不到。

输入

粘贴 YAML

选项切换方向后选项会跟着变

YAML 的锚点与别名在解析阶段就展开成真实值,所以这里没有「保留引用」开关——JSON 里也没有引用这个概念。为什么没有 noRefs 开关:js-yaml 的 noRefs 只对「含共享引用的 JS 对象」生效,而本页输入是文本(YAML 锚点已被展开、JSON 没有引用语义),开关不会产生任何可观察差异,故不提供。

行宽只影响长字符串的换行方式:超过行宽时 js-yaml 会用折叠块(>-)折行。语义不变,但看起来会和你手写的 YAML 不一样。

嵌套对象用点连接(spring.datasource.url)。只有一份文档能转:多文档(---)没有对应的键值形式,会明确报错。空对象与空数组在 .properties 里无法表示,会被跳过并在结果里计数。

粘贴内容后会自动转换

结果

类型边界:YAML 会把这些写成什么

本页按 YAML 1.2 的 core schema 解析(js-yaml 4.x 默认行为)。下面每一条都是本页实测结果,不是"按印象写的":

YAML 写法解析成转成 JSON
true / false / True / TRUE布尔true / false
yes / no / on / off / YES字符串"yes" 等——YAML 1.2 里这些不是布尔(1.1 才是)
007数字 77(不是八进制;八进制要写 0o17)
0x1F数字 3131
1e3数字 10001000
00123 这类要保留前导零的编号数字 123123——要保号请写成 "00123"(带引号)
2024-01-02 / 2024-01-02 03:04:05时间戳(Date)"2024-01-02T00:00:00.000Z"(ISO 字符串)
~ / null / 空值nullnull
.inf / -.inf / .nan±Infinity / NaNnull——JSON 没有这两个值,信息会丢
123456789012345678901234567890双精度近似值1.2345678901234568e+29——长 ID 请写成字符串
"007"(带引号)字符串 "007""007"
块标量 |保留换行的字符串带 \n 的字符串
块标量 >换行折叠成空格单行字符串

常见问题

YAML 转 JSON 之后,注释和锚点去哪了?

都会消失或展开。YAML 的注释是给人看的,JSON 里没有注释这个概念,所以转换后注释一定丢失(这也是「用 YAML 写配置、用 JSON 传数据」要分开的原因之一);锚点与别名(&x / *x)在解析阶段就被展开成真实值,转换后每个引用点都是独立副本——数据等价,但体积会变大,原来的复用关系不再保留。多文档(--- 分隔)会按顺序转成一个 JSON 数组,几个文档就是几个元素。

为什么 yes / no / on / off 转出来是字符串,不是 true / false?

因为本页用的是 YAML 1.2 的 core schema(js-yaml 4.x 的默认行为):只有 true / false(以及 True / False / TRUE / FALSE)才是布尔值,yes / no / on / off 这些 YAML 1.1 时代的写法在这里就是普通字符串。同理,007 会解析成数字 7(不是八进制)、0x1F 解析成 31、日期 2024-01-02 会被识别成时间戳并在 JSON 里变成 ISO 字符串;.inf / .nan 是合法 YAML 数字,但 JSON 没有这两个值,转换后只能变成 null——这几种情况本页都在上方「类型边界」表里逐条写明。

转成 .properties 时,嵌套和数组怎么变成键?

用扁平的键路径:嵌套对象用点连接(spring.datasource.url 这样),数组默认用方括号下标(list[0]、list[1];数组里是对象就继续用点,如 users[0].name),也可以切换成点下标(list.0)。值里有反斜杠、换行、制表符或行首空格会按 java.util.Properties 的规则转义;中文默认原样保留(Java 8 以后按 UTF-8 读取没问题),需要给老工具用时可以勾选「中文转 \uXXXX 转义」。空对象与空数组在 .properties 里没有表示方法,会被跳过并在结果里计数说明。

会上传我的配置吗?能转 Properties 回 YAML 吗?

不会上传。解析、转换、生成全部在你的浏览器里完成,配置内容不出本机、刷新即清空,页面不发起任何网络请求(js-yaml 也是本站自托管的文件,不走 CDN)。Properties 转 YAML(反向)本页不做:「键路径变回嵌套结构」需要猜哪些点是层级、哪些点是键名的一部分(a.b.c 到底是 a 下面的 b 下面的 c,还是一个就叫 a.b.c 的键),猜错会静默改变你的配置语义。这一步请手工整理或用 Spring Boot 这类框架自己绑定。

相关工具