第三个工具:JSON 工具箱的设计与实现
我把开发中最常见的 JSON 格式化、修复、查询、转换、对比和类型生成整理成一个本地优先的小工具,并同时发布 Web 在线版和 Windows 桌面版。
第三个工具:JSON 工具箱的设计与实现
做完图片打码工具和二维码生成器之后,我开始思考一个更偏开发者日常的小工具:JSON 工具箱。
JSON 几乎出现在每一次接口联调、配置排查、日志分析和数据清洗里。很多时候我们只是想快速格式化一段接口返回,或者把一份数组对象转成 CSV,再或者从一个复杂响应里查出某个字段。单独打开多个网页工具当然也能完成,但它们经常有广告、加载慢、体验割裂,数据还要贴到外部网站。
所以这个工具的目标很明确:把 JSON 处理里最常用的一组能力集中起来,做成一个本地优先、响应快、界面干净的工具箱。
为什么不只做格式化
如果只做 JSON 格式化,这个工具会很快完成,但也很容易变成一个“同质化小功能”。我真正需要的是一个日常工作台。
这次我把第一版范围定在这些功能:
- JSON 格式化、压缩、校验。
- 常见错误修复,例如单引号、尾随逗号、未加引号的 key。
- JSONPath 路径查询。
- 结构树查看。
- JSON 字符串转义和反转义。
- JSON 与 CSV 互转。
- JSON 与 YAML 互转。
- 根据示例 JSON 生成 TypeScript 类型。
- 两份 JSON 的结构差异对比。
- 字符数、行数、对象数、数组数、最大深度等统计信息。
这些功能不只是为了“看起来多”,而是覆盖了开发和数据处理里高频出现的几个动作:整理、检查、提取、转换、对比、复用。
架构仍然延续同一套路线
这个工具继续沿用我现在的小工具标准架构:
flowchart LR
A["Svelte + TypeScript UI"] --> B["Web 静态版"]
A --> C["Tauri Windows 桌面版"]
B --> D["博客在线工具页面"]
C --> E["GitHub Release 下载"]
A --> F["本地 JSON 处理核心逻辑"]
项目目录是:
D:\dev\yuan-tools\yuan-json-toolkit
中文名称是:
JSON 工具箱
我把核心处理逻辑放在:
src/lib/core/jsonTools.ts
UI 只负责输入、模式切换、运行和展示。这样后续如果要把某些大体积 JSON 处理迁移到 Web Worker,或者给某个模式加更细的测试,都不需要大改界面。
体验上的几个取舍
第一版没有做成一堆独立页面,而是采用“工作台”布局:
- 左侧输入。
- 右侧输出。
- 顶部切换处理模式。
- 底部显示状态、耗时和本地处理提示。
这样用户进入页面后,不需要阅读说明,也不用先选择一个复杂场景。粘贴内容,选择模式,点击运行,就能得到结果。
我还刻意没有在输入时自动持续处理。因为 JSON 内容可能很大,如果每次输入都同步解析和转换,界面会变卡。第一版采用点击运行的方式,减少不必要的计算。后续如果遇到更大文件场景,可以再把重任务放到 Web Worker。
发布时遇到的小问题
这次发布前后还修了两个流程和兼容性问题:一个是 GitHub Release 的说明文件曾经出现中文乱码,另一个是 Svelte 5 的应用挂载方式。
原因不是文章内容本身,而是 PowerShell 脚本在 Windows 下执行无 BOM 的中文 .ps1 时,可能会按系统代码页解释中文。最后我把发布资产脚本重新保存成 Windows PowerShell 能稳定识别的 UTF-8 格式,并重新生成 release notes。
这是一个小问题,但很值得记录。因为我的目标不是只做一个工具,而是长期重复发布很多工具。发布链路里任何一个小乱码,都会在未来被复制很多次。越早修掉,后面越省心。
第一次发布后,我在本地重新验证时发现页面虽然能打开,但工具交互无法正常使用。根因是入口文件还使用了旧的 new App(...) 写法,而当前项目依赖的是 Svelte 5。修复方式是改为 mount(App, ...),并重新用浏览器点击“运行当前处理”验证 Web 静态包确实能产生结果。
最终产物
这次发布的仓库是:
https://github.com/yuan0727/yuan-json-toolkit
当前推荐下载的 Release:
https://github.com/yuan0727/yuan-json-toolkit/releases/tag/v0.1.1
Release 资产包括:
yuan-json-toolkit-win-v0.1.1.exeyuan-json-toolkit-web-v0.1.1.zipyuan-json-toolkit-guide-v0.1.1.md
博客上线后,工具页面会放在:
https://www.yuantools.com/tools/json-toolkit/
在线使用页面会放在:
https://www.yuantools.com/apps/json-toolkit/
下一步
JSON 工具箱第一版已经能覆盖大部分常见需求,但它还有继续增强的空间:
- 大 JSON 处理放到 Web Worker。
- 树视图改成真正可折叠的虚拟列表。
- JSON 对比增加更直观的左右高亮。
- CSV 转 JSON 增加类型推断。
- 增加历史记录和常用片段。
这类工具的价值不在于一次做完所有功能,而在于它会在真实使用中不断变得顺手。对我的长期计划来说,这也是一个很好的作品:它既能服务在线流量,也能展示我把一个开发者需求做成完整应用的能力。