免费工具 JSON 转 YAML,YAML 转 JSON
贴入 JSON,得到能直接放进配置文件的 YAML;贴入 YAML,得到给接口或脚本用的 JSON。转换时值的类型保持不变:长得像布尔值、日期、数字的字符串会加上引号,换个解析器读也还是原来的意思。
- 双向转换
- 出错标出行号
- 本地处理
JSON 和 YAML 互转
示例是一份简单的埋点方案:产品要上报哪些事件、每个事件带哪些属性。点「互换方向」可以把结果再转回去。
严格 JSON,或 YAML 1.2。用 --- 分隔的多个 YAML 文档会转成 JSON 数组。
键数
25
各层对象的键。
嵌套层级
6
对象和列表的层数。
YAML 文档数
1
用 --- 分隔。
大小(字节)
507
结果按 UTF-8 计算。
检查结果
version: 2
owner: growth@example.cn
review: '2026-12-01'
events:
- name: signup
description: 完成注册
properties:
plan:
type: string
enum:
- free
- pro
country:
type: string
example: 'NO'
- name: order_paid
description: 支付成功
properties:
amount:
type: number
required: true
currency:
type: string
example: CNY
coupon:
type: string
nullable: true
版本 v1.0更新于 更新记录
转换结果告诉你什么
除了转换后的文本,还有一句结论、几个统计数字和一份检查清单。
转换成功,或出错的行列
JSON 按严格 JSON 解析,YAML 按 YAML 1.2 解析。出错时给出解析器停下的位置,错误就在那里或紧挨在前面。选了 JSON → YAML 却贴了 YAML,工具会认出来并提示互换方向。
键数和层级
同一份数据无论写成哪种格式,键数和层级都一样,可以用来快速核对有没有丢东西。层级越深,两种格式手工改起来都越费劲。
YAML 里加了引号的值
只有不加引号就会读成别的类型时才加:'NO'、'2026-12-01'、'on'、'0755',其余一律不加。
检查结果
YAML 输入时会列出:YAML 1.1 工具会读成别的类型的值、JSON 存不下的注释、被展开的锚点、超出 JavaScript 精度的大整数。
转换走的是「数据」而不是文本:JSON 的键顺序会保留,但 YAML 的注释、锚点名称、块样式和流样式的选择不会保留。日期保持为字符串,不会转成时间戳。
三步完成
不用安装,数据不上传。
-
1
选方向
写配置文件、做可读文档用 JSON → YAML;给接口、脚本或任何需要 JSON 的地方用 YAML → JSON。
-
2
贴入内容
边输边转换。出错时标出行列,值得加引号的值单独提醒。
-
3
复制、下载或互换
复制结果,下载成
data.yaml/data.json,或点「互换方向」检查来回转换是否一致。
JSON 和 YAML 的值怎么对应
YAML 1.2 的设计让 JSON(几乎)成为它的子集。本工具读 YAML 用 1.2 核心 schema,写 YAML 时把 YAML 1.1 解析器可能读成别的类型的值都加上引号。
- 读 YAML:js-yaml 4.3.2,核心 schema 加
<<合并键;重复键、Tab 缩进都报错 - 写 YAML:像布尔值、数字、日期、
null的字符串加引号;多行字符串用|块 - 写 JSON:一个文档转成一个值,多个文档转成数组;
.inf、.nan无法转换
| JSON | YAML 输出 | 原因 |
|---|---|---|
"pro" | pro | 普通文字不用引号 |
"NO" | 'NO' | 不加引号在 YAML 1.1 里是 false |
"2026-12-01" | '2026-12-01' | 不加引号很多解析器会转成日期 |
"0755" | '0755' | 不加引号是数字 |
null | null | 两边是同一个关键字 |
"" | '' | 空着不写会读成 null |
"第一行\n第二行" | |- 块 | 换行保持可读 |
YAML 示例转成 JSON 后
YAML 示例用了三种 JSON 没有的写法,下面是它们各自的去向。
| YAML 里 | JSON 里 | 说明 |
|---|---|---|
# 埋点方案 注释 | 没有了 | JSON 没有注释,工具会告诉你去掉了几段 |
defaults: &money 和 amount: *money | amount 得到一份完整的对象 | 锚点和别名展开 |
tax: 里的 <<: *money 加 required: false | {"type": "number", "required": false} | 合并键先复制锚点,再用本地的键覆盖 |
review: 2026-12-01 | "review": "2026-12-01" | 保持字符串,不转成时间戳 |
再把 JSON 转回 YAML,锚点就没有了:数据一样,简写没了。YAML 是手工维护的话,请把 YAML 当作源文件。
转换容易出问题的地方
多数意外出在类型上,而不是语法上。
手写 YAML 不加引号
以后手工修改时写下的 country: NO、version: 3.10、zip: 02108,程序读到的未必是你想的。用本工具转换会自动加引号,手改不会。
长 ID 写成数字
超过 9,007,199,254,740,991 的整数在 JavaScript 里会丢精度,本工具也一样。订单号、64 位 ID 两种格式里都写成字符串。
指望注释能保留
JSON 没有放注释的地方。需要跟着数据走的说明,像示例那样放进 description 字段。
把密钥贴进网页工具
配置文件里常有 API 密钥和密码。本工具在本地运行,输入也不会写进分享链接,但贴进任何在线工具之前都建议先去掉密钥。
让数据真正按埋点方案来
很多团队把埋点方案用 YAML 或 JSON 放在代码仓库里。在 TapCub 里,上报的事件和属性到达时就会被检查,方案和实际数据不会悄悄走样。
json转yaml怎么转?
选 JSON → YAML,把 JSON 贴进来即可:对象变成缩进的键,数组变成 - 开头的列表,字符串只在不加引号会变类型时才加引号。缩进可选 2 或 4 个空格,YAML 不允许用 Tab。
yaml转json工具怎么用?
选 YAML → JSON 再贴入 YAML。锚点、别名、合并键会展开,注释会去掉,用 --- 分隔的多个文档会转成 JSON 数组。出错时标出第几行第几列。
YAML 是 JSON 的超集吗?
基本是。YAML 1.2 做了调整,让几乎所有 JSON 文档都是合法的 YAML,所以能把 JSON 直接贴进大多数 YAML 文件。反过来不行:注释、锚点、多行文本块、不加引号的字符串,JSON 都没有对应写法。
为什么 YAML 结果里有些值加了引号?
因为不加引号读回来就是别的类型:NO、on 在 YAML 1.1 里是布尔值,2026-12-01 会被当成日期,0755 是数字。加了引号,不管哪种解析器读,来回转换都一致。
日期为什么还是字符串?
JSON 没有日期类型,所以 2026-12-01 保持文本,而不是转成带时区的时间戳。这样转回去和原来完全一样。
为什么两个方向的键数一样?
统计的是数据而不是文本。如果 YAML → JSON 的键数比预想的多,多半是某个锚点被展开成了好几份。
数据会上传吗?
不会。转换在浏览器里完成,YAML 组件从 tapcub.com 下载一次后在本地运行。输入内容不会写进分享链接,分享链接只带方向和排版选项。