JSON ↔ YAML(受控子集)
在受控 YAML 子集内双向转换映射、序列、标量、引号字符串、布尔与 null;自动探测方向参数,可控拒绝别名炸弹、标签、块标量与超深结构。
输入与参数
input— 输入(JSON 或 YAML)direction— 转换方向indent— 缩进空格数
真实示例
{"name":"Ada","active":true,"deleted":null,"empty":{},"tags":["a",2],"created":"2024-05-01","__proto__":{"polluted":false}}
→ name: Ada
active: true
deleted: null
empty: {}
tags:
- a
- 2
created: "2024-05-01"
__proto__:
polluted: false
限制与失败处理
只接受单文档受控 YAML 子集,不追求完整 YAML 1.2 兼容;流集合 []/{} 只支持单行;无锚点、无标签、无块标量、无复杂键。日期仅作字符串,别名/二进制明确拒绝。输入上限 1 MiB / 深度 64 / 60000 节点,错误含行列号。
FAQ
Date、别名和二进制怎么处理?
YAML 1.2 / JSON 都没有 Date 类型,日期样式标量保留为字符串并在输出时加引号;& 锚点、* 别名和 << 合并键一律拒绝(别名炸弹绝不展开);!!binary 等标签一律拒绝,请把二进制写成带引号的 base64 字符串。
"true" 与 true 会混淆吗?
不会。字符串形式的 true、null、数字和日期都会被引号包裹,输出再解析回 JSON 时仍是字符串;布尔/null 则不带引号。
支持多文档或块标量吗?
不支持。---/... 标记、|/> 块标量、指令、复杂键、非十进制数字、.inf/.nan 都会给出带行列号的错误,避免隐式展开与数值歧义。