JSON、YAML、TOML 三格式互转,自动检测源格式,语法错误给出行号列号,附 5 个常用配置模板与缩进选项
JSON、YAML、TOML 三种配置格式在线互转:粘贴内容后自动识别输入格式(也可以手动指定),实时给出目标格式的结果,支持 JSON/YAML/TOML 之间任意方向的 6 种转换,也支持同格式的重新格式化。附 package.json、tsconfig.json、docker-compose.yml、GitHub Actions、Cargo.toml 五个常用模板,一键载入即可看到真实配置的转换效果。
语法错误会定位到**行号与列号**并给出中文说明(如「YAML 语法错误,第 3 行 第 5 列:expected ',' or ']'」),而不是只报一句 failed to parse —— 转换前先校验,比转换失败后再回头找错高效得多。
三种格式的能力边界不同,转换时工具会按目标格式自动适配并逐条提示:**TOML 没有 null**(源数据里的 null 会被移除)、**TOML 顶层必须是表**(顶层是数组或标量时会明确报错)、**YAML 不能用 Tab 缩进**(选了 Tab 会自动回退为 2 空格)、**JSON 没有日期类型**(YAML/TOML 里的日期会转成 ISO 字符串)、**JSON 不支持 NaN/Infinity**(按标准转为 null)。
可以。工具会先看内容形态(以 { 或 [ 开头按 JSON 处理、出现行首 key = value 按 TOML、出现行首 key: value 或 - 开头按 YAML),再用解析结果兜底。之所以不能只靠「谁能解析成功」来判断,是因为 YAML 极其宽松 —— 几乎任何文本都能被它当成字符串解析成功,那样自动检测会永远判定为 YAML。也可以在上方手动指定输入格式。
因为 TOML 的文档结构就是一张表(键值对集合),无法表示「顶层是数组」或「顶层是单个值」的文档。如果源数据是数组,可以把它包在一层键里,例如把 [{...}, {...}] 改成 {items: [{...}, {...}]} 再转换。
不会静默丢。三种格式的能力有差异,凡是需要适配的地方都会在结果上方逐条列出,例如 TOML 不支持 null 时会说明「已移除 items[2]:TOML 不支持 null」,YAML 日期转 JSON 时会说明转成了 ISO 字符串。可以先看提示再决定是否接受。
对 JSON 与 YAML 生效,可选 2 空格、4 空格或 Tab。TOML 的缩进由标准约定(表头、键值对通常不缩进),没有可调空间,因此该选项不影响 TOML 输出;另外 YAML 规范禁止用 Tab 作缩进,选择 Tab 时会自动改用 2 空格并给出提示。
有 5 个常用模板:package.json、tsconfig.json(JSON)、docker-compose.yml、GitHub Actions(YAML)、Cargo.toml(TOML)。选择模板会把内容载入输入框并立即转换,适合先看看真实配置转成另一种格式长什么样。
{
"version": "3.8",
"services": {
"web": {
"image": "nginx:1.25-alpine",
"ports": [
"80:80",
"443:443"
],
"volumes": [
"./html:/usr/share/nginx/html:ro"
],
"depends_on": [
"api"
…(完整结果请在上方工具中查看)name: my-web-app version: 1.2.0 private: true scripts: dev: vite build: vite build lint: eslint src dependencies: vue: ^3.4.0 pinia: ^2.1.0 devDependencies: vite: ^5.0.0 typescript: ^5.3.0 engines: …(完整结果请在上方工具中查看)
{
"package": {
"name": "my-cli",
"version": "0.3.1",
"edition": "2021",
"description": "一个示例命令行工具"
},
"dependencies": {
"serde": {
"version": "1.0",
"features": [
"derive"
]
},
…(完整结果请在上方工具中查看)