JSON 格式化、校验与转换
格式化、压缩、深度按键排序,语法错误会定位到行列;还能一键转成 YAML 或 TypeScript 类型定义。 内容不会离开这个页面。
— 内容不会离开这个页面 —— 本站是纯静态资源站,没有可以接收数据的后端。
YAML 方向是单向的:把 JSON 写成 YAML 是确定的;反过来解析任意 YAML 不是,所以这里没有做半成品。
几个和别处不一样的地方
校验是随打随校的,格式化则要点按钮 —— 一边输入一边重排会把光标弹走。 报错会尽量落到行和列:V8 多数情况下自带行列,直接沿用; 只给字符偏移(「position 3184」在一行压缩过的 JSON 上等于没说)时换算成行列; 遇到只给出片段、不给位置的那种报错,只有当那个字符在全文里唯一时才定位 —— 在几个候选之间猜,不如不说。
「按键排序」是深度排序。它的用处不是好看,而是让两份「同一个对象」的导出能干净地 diff ——
键顺序不同的两个 JSON,在 git diff 里会显示成整块重写。
两个转换是为「格式化完之后要干什么」准备的:
转 YAML 给需要把配置搬到另一种格式的人;
转 TS 类型 给马上要在代码里消费这段响应的人 ——
数组会取所有元素类型的联合,遇到 null 会给
unknown | null,因为样本里的一个 null 只说明这个字段可空,并不说明它的类型是 null。
YAML 只做单向。把 JSON 写成 YAML 是一个封闭问题;反过来解析任意 YAML(锚点、别名、多文档、隐式类型) 不是,做个半成品比不做更坏。同理,这里没有引入任何解析库: 一个 40 KB 的依赖省下的代码,不值得让每个访客都下载一次。