跳到主内容
UniKit

YAML 转 JSON

把 YAML 转成 JSON:支持多文档(--- 分隔,输出数组)、锚点与合并键 <<、日期类型自动转成 ISO 字符串,可选缩进与递归键排序;非法 YAML 报错带行列位置,并统计文档、键、数组与嵌套深度。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

YAML 输入

支持多文档(--- 分隔 → JSON 数组)、锚点 &name 与合并键 <<、日期时间戳(会转成 ISO 字符串)。

JSON

[
  {
    "defaults": {
      "host": "localhost",
      "port": 8080
    },
    "service": {
      "host": "localhost",
      "port": 9000
    },
    "created": "2020-01-02T03:04:05.000Z"
  },
  {
    "items": [
      {
        "name": "alpha",
        "enabled": true
      },
      {
        "name": "beta",
        "enabled": false
      }
    ]
  }
]

结构统计

文档数2
键数量12
数组1
标量9
嵌套深度3
输入行数14
输入字节数248
日期(已转 ISO)1

检测到的特性

锚点 &有
引用 *有
合并键 <<有
显式标签 !!无
日期时间戳有

这个工具能做什么

  • 把 K8s、CI、Docker Compose 之类的 YAML 配置转成 JSON,喂给只吃 JSON 的脚本、模板引擎或接口调试工具。
  • 核对 YAML 里到底解析成了什么类型:日期会变成 ISO 字符串、缩进错了会直接报行列位置,比肉眼读配置可靠。
  • 同时处理多份文档(--- 分隔)时自动输出 JSON 数组,省去逐个粘贴的麻烦。
  • 需要稳定输出时勾选「按键名排序」,生成的文件在代码评审里不会因为键序不同而产生假 diff。

示例

输入

name: UniKit
version: 1.2
stable: true
released: 2020-01-02
tags:
  - yaml
  - json

输出

{
  "name": "UniKit",
  "version": 1.2,
  "stable": true,
  "released": "2020-01-02T00:00:00.000Z",
  "tags": [
    "yaml",
    "json"
  ]
}

默认选项(缩进 2、不排序、YAML 1.2 语义)的输出。未加引号的 2020-01-02 被识别成日期,转成 JSON 时变成 ISO 字符串;想保留原样就写成 "2020-01-02"。

常见问题

为什么日期变成了 2020-01-02T00:00:00.000Z?

YAML 的 timestamp 标签会把未加引号的日期解析成时间对象,而 JSON 没有日期类型,只能序列化成 ISO 字符串(按 UTC)。想原样保留就用引号写成字符串,或改用 JSON 里习惯的格式。

多文档 YAML 怎么处理?

用 --- 分隔的多份文档会解析成一个 JSON 数组,每份文档一个元素;只有一份文档时直接输出该文档,勾选「总是数组」后会强制包成数组。统计面板里的文档数就是解析出来的份数。

yes / no / on / off 为什么没有变成布尔值?

默认按 YAML 1.2(Core schema)解析,只有 true / false 是布尔。旧配置里大量使用 yes / no,勾选「YAML 1.1 语义」后它们也会解析成布尔值,可以和原系统的行为对齐。

YAML 写错了怎么办?会提示位置吗?

会。解析失败时输入框下面给出第几行第几列以及 js-yaml 的原因(例如缩进错误、重复键、制表符),而不是笼统的「格式错误」。输入超过 50 万字符会提示内容过长。

支持锚点、合并键和自定义标签吗?

锚点(&)、引用(*)、合并键(<<)和时间戳都能正确解析,界面上的「特性」面板会标出用到了哪些。二进制等无法映射成 JSON 的值会降级成数字数组或 null,不会让转换整体失败。数据全程在浏览器本地处理,不会上传。

关键词:yamlymlyaml to jsonYAML 转 JSON合并键merge key锚点anchor多文档序列化

同类工具