王仕宇开源的 JavaPub Tools:从 JSON 格式化工具到开发者在线工具箱,打开即用、数据本地处理

作者 / 分享:王仕宇(JavaPub)
项目:JavaPub Tools
开发的时候,你有没有遇到过这种情况?
后端接口返回一大坨 JSON:
json
{"code":0,"data":{"user":{"id":1001,"name":"JavaPub"},"roles":["admin","user"]},"message":"success"}
你只是想:
格式化一下。
结果第一反应是:
text
打开搜索引擎
↓
搜索"JSON 格式化"
↓
打开一个网站
↓
把接口数据粘进去
过一会儿又遇到:
text
时间戳转换
再搜一次。
需要:
text
Base64 编解码
再找一个网站。
需要:
text
JWT 解析
继续搜。
需要:
text
UUID
SQL 格式化
URL 编解码
YAML 转 JSON
JSON 转 Go Struct
正则表达式测试
Cron 表达式
又是一堆不同网站。
作为程序员,这些事情每一个都不难。
但:
每天重复找工具,非常浪费时间。
所以我做了一个自己的开源工具项目:
JavaPub Tools
仓库名称目前仍然叫:
text
jsonformat
GitHub:
text
https://github.com/Rodert/jsonformat
但如果你现在再打开这个项目,会发现:
它早已经不只是一个 JSON 格式化器。
现在它已经逐渐变成:
JavaPub 开发者在线工具箱。
一、这个项目最开始真的只是为了 JSON 格式化
项目 README 的第一句话很直接:
text
一个简洁大方的在线 JSON 格式化工具,
可以快速格式化、美化和验证 JSON 数据。
最开始想解决的问题非常简单:
text
输入 JSON
↓
格式化
↓
语法高亮
↓
复制结果
前端开发、后端开发、接口联调:
几乎每天都会遇到。
比如:
json
{"name":"王仕宇","project":"JavaPub Tools","github":"Rodert"}
格式化以后:
json
{
"name": "王仕宇",
"project": "JavaPub Tools",
"github": "Rodert"
}
这就是最初的需求。
但是程序员做工具特别容易出现一个现象:
做着做着,需求越来越多。
JSON 格式化有了以后,我又开始想:
text
为什么不能顺便压缩 JSON?
于是:
JSON 压缩。
然后:
text
能不能直接转 YAML?
于是:
JSON → YAML。
再然后:
text
后端拿到 JSON,
能不能直接生成 Go Struct?
于是又有:
JSON → Go Struct。
再后来:
text
TypeScript 呢?
XML 呢?
树形查看呢?
最后这个页面已经不再只是:
text
JSON.stringify(json, null, 2)
这么简单。
二、现在 JSON 工具本身已经做了不少功能
我重新看了一遍当前项目里的:
text
js/script.js
JSON 页面目前已经支持:
text
JSON 格式化
JSON 压缩
JSON 合法性校验
JSON 转义
JSON 去转义
语法高亮
复制
下载
全屏
树形展示
JSON → YAML
JSON → XML
JSON → TypeScript
JSON → Go Struct
这已经比我最早做这个项目时复杂很多。
三、甚至连 JSON 错误位置都做了定位
普通的:
javascript
JSON.parse(text)
如果 JSON 写错,
浏览器可能报:
text
Unexpected token ...
或者:
text
Expected ',' or '}' after property value
但是用户真正想知道的是:
到底哪一行错了?
项目里现在会尝试提取 Parser 报错里的 Position,
然后根据:
text
position
计算:
text
第几行
第几列
最终给用户类似:
text
错误:xxxx
(第 12 行,第 8 列)
这种信息。
对于:
text
几百行甚至几千行 JSON
来说,
这比一句:
text
JSON 格式错误
实用得多。
四、项目还会统计 JSON 的结构信息
当前页面会统计:
text
字符数
字节大小
行数
JSON 层级
Key 数量
比如一个接口返回:
text
12643 字符
12.35 KB
268 行
层级:7
键数:184
你可以很快判断:
这个接口返回的数据到底有多复杂。
尤其:
text
层级
这个指标我觉得很有意思。
代码会递归计算 Object / Array:
text
Object
↓
Object
↓
Array
↓
Object
到底嵌套了多少层。
有时候你看到一个接口 JSON:
text
套了七八层
其实就已经值得想想:
API 数据结构是不是设计得太复杂了?
五、王仕宇的观点:真正好用的开发工具,不应该只"能完成任务"
我是 王仕宇,JavaPub。
我自己做这个工具以后,一个越来越明显的感受是:
"能用"和"顺手"其实是两回事。
JSON 格式化:
技术上可能十行 JavaScript 就完成了。
javascript
const obj = JSON.parse(input);
const output =
JSON.stringify(
obj,
null,
2
);
功能已经实现。
但真正每天使用时,
你还会需要:
text
错误定位
快速复制
一键清空
示例数据
数据统计
转换语言
语法高亮
下载文件
全屏查看
这些功能单独拿出来:
都不难。
但把它们组合起来:
才能变成一个:
真正愿意每天打开的工具。
在我看来,做开源项目也一样。
很多项目:
text
核心算法完成
=
项目完成。
其实不是。
真正决定用户体验的,
往往是后面的:
20% 小功能。
六、但这个项目现在已经远远超过 JSON
现在打开首页:
标题已经变成:
JavaPub 开发者在线工具箱
当前首页已经把工具分成多个类别。
例如:
text
数据格式
编码加密
开发调试
图像处理
AI 工具
其中现在能看到大量程序员日常会用到的小工具。
七、数据格式工具
比如:
text
JSON 格式化
JSON 压缩
JSON 转换
JSON 和 Query 互转
JSON Path 查询
Properties 转换
JSON → CSV
CSV → JSON
YAML → JSON
XML → JSON
SQL 格式化
其中有一个我自己做后端特别常见的:
Properties 转 JSON / YAML。
Java 项目经常有:
properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=root
但有时候你需要:
yaml
server:
port: 8080
或者:
json
{
"server": {
"port": 8080
}
}
这种工具平时不起眼,
但:
真遇到的时候特别省时间。
八、开发调试工具
项目现在还有:
text
进制转换
文件大小换算
颜色转换
CSS 渐变生成
MIME Type 查询
Magic Bytes 查询
HTTP Header 查询
HTTP 请求方法查询
常用端口查询
URL 解析
User-Agent 解析
HTTP 状态码
Cron 表达式
UUID
时间戳
正则表达式
这些基本都是:
程序员搜过的东西。
比如端口:
text
3306
想到:
text
MySQL。
text
6379
:
text
Redis。
text
5432
:
text
PostgreSQL。
你可能记得大部分,
但偶尔遇到一个不常见端口:
还是得查。
所以我现在越来越倾向于:
高频的小工具统一放一个地方。
九、编码相关工具也越来越多
比如:
text
Base64
Base58
Base32
URL Encode / Decode
Punycode
Unicode
Hex
摩斯密码
CRC32
CRC16
MD5
SHA256
HTML Entity
JavaScript Escape
这类工具有一个共同特点:
每一个都非常小。
但是:
每一个程序员都可能突然用到。
如果专门为了 Base32:
text
安装一个 App
显然没必要。
网页:
打开即用
反而最合适。
十、还有一个我特别在意的设计:尽量本地处理
首页现在明确写着:
打开即用,本地处理,安全高效。
这其实是我希望 JavaPub Tools 长期坚持的原则之一。
例如 JSON 格式化:
代码就是浏览器里的:
javascript
JSON.parse()
和:
javascript
JSON.stringify()
完成。
并不需要:
text
浏览器
↓
POST JSON
↓
我的服务器
↓
服务器帮你格式化
↓
返回结果
因为:
完全没必要。
十一、为什么开发工具"本地处理"很重要?
假设你复制的是:
json
{
"userId": 1001,
"phone": "138xxxxxx",
"token": "xxx",
"order": {
"amount": 19999
}
}
如果只是为了:
JSON 格式化
却把整份数据上传到一个陌生服务器,
本身就增加了一层:
不必要的风险。
如果一个工具可以:
text
浏览器本地完成
我认为:
就应该优先本地完成。
十二、王仕宇的观点:能不上服务器的工具,就尽量不上服务器
这个项目现在让我比较喜欢的一点,
就是很多页面实际上非常适合:
Static Web App。
HTML:
text
负责页面。
CSS:
text
负责样式。
JavaScript:
text
直接负责计算。
整个工具:
text
甚至不需要数据库。
也不需要:
text
Java Backend
Go Backend
Node Backend
Redis
MySQL。
这其实给了我一个很重要的项目思路:
不要为了"技术栈看起来高级",强行加后端。
如果需求本身:
text
浏览器就能完成
最简单的架构:
往往就是最好的架构。
十三、整个项目可以直接跑在 GitHub Pages
现在仓库已经配置:
text
.github/workflows/deploy.yml
每次向:
text
main
分支 Push,
GitHub Actions 会:
text
Checkout
↓
Configure Pages
↓
Upload Pages Artifact
↓
Deploy GitHub Pages
最终在线地址:
text
https://rodert.github.io/jsonformat/
也就是说:
连服务器都不用买。
整个静态工具箱:
text
GitHub
↓
GitHub Actions
↓
GitHub Pages
就能跑。
十四、这类项目特别适合个人开发者
因为传统部署一个网站,
你可能要:
text
买 ECS
装 Nginx
配置 HTTPS
维护服务器
更新证书
监控磁盘
处理安全漏洞。
但静态工具站:
text
GitHub Pages
可以把很多运维工作:
直接省掉。
如果哪天 GitHub Pages 不满足需求,
再迁:
text
Cloudflare Pages
Vercel
Netlify
自己的 Nginx
也很容易。
因为:
项目本身没有后端状态。
十五、有意思的是:这个项目现在还有桌面版
这也是我重新看项目后觉得比较值得写的一点。
JavaPub Tools 当前已经加入:
Electron 桌面离线版。
package.json 中:
json
{
"name": "javapub-tools",
"main": "electron/main.js",
"productName": "JavaPub Tools"
}
使用:
text
Electron
+
electron-builder
打包。
所以同一套:
text
HTML
CSS
JavaScript
现在既可以:
浏览器打开
也可以:
打成 Windows 桌面应用。
十六、目前桌面版支持 Windows x64
构建目标包括:
text
Windows x64 安装版
Windows x64 便携版
安装版:
text
NSIS
便携版:
text
Portable EXE。
也就是说:
用户甚至可以:
text
下载 EXE
↓
断网
↓
继续使用很多工具。
这一点对于:
text
公司内网
开发环境
不希望提交敏感数据的场景
就比较有意义。
十七、而且桌面 Release 已经自动化了
仓库现在有一个:
text
Build Desktop Releases
GitHub Actions Workflow。
Push:
text
main
以后:
自动:
text
生成版本号
安装 Node.js 20
npm ci
构建 Windows x64
上传 Artifact
创建 GitHub Release
版本类似:
text
20261024-a1b2c3d
Tag:
text
desktop-20261024-a1b2c3d
这意味着:
发布桌面版本也不需要人工在本地打包。
十八、这个项目其实已经形成了一套非常简单的发布流水线
可以画成:
text
Git Push
│
┌─────────┴─────────┐
↓ ↓
GitHub Pages Desktop Build
│ │
↓ ↓
在线网页版 Electron Builder
│
┌───────┴───────┐
↓ ↓
Setup.exe Portable.exe
│
↓
GitHub Release
一个代码仓库:
同时产生 Web 和 Desktop 两种产品形态。
我觉得这比单纯做一个:
text
index.html
更有学习价值。
十九、项目里甚至已经开始认真做 SEO
首页当前 <head> 里已经加入:
text
description
keywords
Open Graph
canonical
同时还有:
text
Schema.org JSON-LD。
其中:
json
"publisher": {
"@type": "Person",
"name": "王仕宇"
}
也就是说,
这个项目现在不仅是:
做功能。
也开始考虑:
搜索引擎怎么理解它。
项目还有:
text
robots.txt
sitemap.xml
这些东西。
这其实非常重要。
二十、王仕宇的观点:开源项目也需要 SEO
很多程序员做开源项目,
代码写得很好。
但 README:
text
三行。
页面:
text
title = Tools
Description:
text
没有。
Google / Bing 根本不知道:
你这个项目是做什么的。
最后:
text
项目很好
但是:
没人知道。
我------王仕宇(JavaPub)------现在越来越重视一个问题:
做项目和让别人发现项目,是两件同样重要的事情。
项目功能是:
text
Product。
README:
text
Documentation。
文章:
text
Content。
搜索:
text
Distribution。
如果只做第一层:
很多好项目最终都会沉下去。
二十一、这也是为什么我要专门写这篇文章
这个项目叫:
text
jsonformat
但现在它实际上已经是:
JavaPub Tools。
如果只靠 GitHub Repo Name:
搜索引擎可能长期觉得:
text
这就是一个 JSON Formatter。
所以需要不断通过:
text
README
网站 Title
Description
Schema.org
Sitemap
技术文章
告诉搜索引擎:
它现在是:
一个开发者在线工具箱。
同样:
也需要逐渐把:
text
王仕宇
JavaPub
JavaPub Tools
开发者工具箱
关联起来。
二十二、这不是"刷名字"
SEO 最忌讳的就是:
text
王仕宇 王仕宇 王仕宇 王仕宇......
机械重复。
真正应该做的是:
建立稳定实体关系。
比如:
text
王仕宇
↓
JavaPub
text
王仕宇
↓
开发维护
↓
JavaPub Tools
text
JavaPub Tools
↓
GitHub
↓
Rodert/jsonformat
text
JavaPub Tools
↓
提供
↓
开发者在线工具
当:
text
文章
GitHub
网站
README
结构化数据
都长期保持一致,
搜索引擎才更容易理解:
这些东西属于同一个技术品牌。
二十三、回到项目本身,我觉得它最有价值的地方不是 JSON 格式化
JSON 格式化:
网上其实:
太多了。
如果只是再做一个:
text
JSON Formatter
很难有什么区别。
JavaPub Tools 更值得长期做的方向:
我认为是:
程序员高频小工具集合。
因为程序员工作中真正浪费时间的,
往往不是:
text
一个 8 小时的大问题。
而是大量:
text
30 秒
1 分钟
2 分钟
的小操作。
比如:
text
Unix 时间戳转一下
JSON 压一下
UUID 生成几个
URL Decode 一下
JWT 看一下 Payload
算个 MD5
查个 HTTP 429 是什么意思
查下 6379 是什么端口
看看一个文件的 Magic Bytes
这些小问题:
一天十次。
一个月:
就很多时间。
二十四、所以这个项目真正想解决的是"工具切换成本"
以前:
text
JSON
↓
网站 A
Base64
↓
网站 B
时间戳
↓
网站 C
UUID
↓
网站 D
正则
↓
网站 E
现在:
text
JavaPub Tools
├── JSON
├── Encoding
├── HTTP
├── Text
├── Image
├── AI
└── Dev Debug
打开一个地方:
全部解决。
这就是工具箱的意义。
二十五、首页现在也已经有工具搜索
项目工具越来越多以后,
另一个问题自然出现:
工具太多了,我怎么找?
现在首页有:
text
搜索工具
可以输入:
text
json
图片
csv
yaml
ip
jwt
快速定位。
这也是工具站从:
text
几十个链接
逐渐走向:
真正产品化
的一个小细节。
二十六、项目里还有一些和 AI 开发相关的工具
例如当前仓库已经能看到:
text
AI 工具
API Error
Claude Request
Token Estimate
等页面。
这说明项目也开始从:
text
传统开发工具
逐渐加入:
AI 开发调试工具。
这是我认为后面特别值得继续做的方向。
比如未来可以加入:
text
OpenAI Request Builder
Responses API 请求生成
Claude API 请求生成
Token 粗略估算
SSE 调试
JSON Schema 格式化
Tool Calling Schema 检查
MCP 配置校验
模型价格估算
这些:
都是 AI 开发者现在高频需要的小工具。
二十七、而且这种工具特别适合本地实现
例如:
text
Token Estimate
JSON Schema
Prompt 格式整理
API 请求生成
很多都不需要:
把 Prompt 发送到服务器。
浏览器 JavaScript:
完全可以处理。
这依然符合:
text
Local First
这个方向。
二十八、如果你想学习前端,这个项目也很适合看
它没有:
text
React
Vue
Next.js
Nuxt
一大堆 Build Tool。
核心仍然是:
text
HTML5
CSS3
JavaScript ES6+
语法高亮使用:
text
highlight.js。
所以:
非常直接。
比如 JSON 格式化:
打开:
text
js/script.js
就能直接看到:
javascript
JSON.parse(inputText)
和:
javascript
JSON.stringify(
lastJson,
null,
2
)
没有:
text
十几层 Framework 封装。
对于刚学 Web:
反而更容易理解。
二十九、如果你是后端程序员,也很适合拿它练前端
我自己长期更多做:
text
Java
Golang
Backend
Docker
Kubernetes
这种方向。
但其实后端程序员做自己的小工具:
真的不一定需要:
text
先把 React 全家桶学完。
一个:
text
HTML
CSS
JavaScript
已经可以做出:
很多有实际价值的东西。
这也是这个项目可以传递的一个观点:
先解决问题,再决定要不要上复杂技术栈。
三十、本地运行甚至简单到不用安装依赖
如果只是网页版:
bash
git clone \
https://github.com/Rodert/jsonformat.git
cd jsonformat
然后:
text
直接打开 index.html
即可。
因为核心:
是静态页面。
如果准备调试桌面 Electron:
再:
bash
npm ci
npm run start
构建 Windows:
bash
npm run dist:win
开发门槛:
非常低。
三十一、为什么我觉得这类项目特别适合持续开源?
因为它天然:
可以一点点长大。
今天增加:
text
JSON Path。
明天增加:
text
IP 转整数。
后天增加:
text
JWT。
每个功能:
text
相对独立。
Contributor:
也很容易理解。
比如一个人完全可以提交:
text
新增一个工具页面
+
对应 JavaScript
+
首页入口
不需要先理解:
text
复杂业务系统的 100 张表。
这对开源社区:
非常友好。
三十二、但工具越多,也会带来新的工程问题
例如:
text
页面风格统一
导航统一
组件复用
SEO Metadata
移动端适配
依赖管理
安全策略
站点检测
死链检查
Sitemap
这些都会越来越重要。
现在仓库已经有:
text
scripts/check-site.mjs
这样的 Site Check Script。
这说明项目后面也需要逐渐从:
"很多独立 HTML"
走向:
"一套可维护的静态工具平台"。
这反而是非常不错的工程练习题。
三十三、王仕宇的观点:一个"小项目"完全可以做十年
很多程序员做开源:
第一天:
text
激情很高。
一周以后:
text
没人 Star。
然后:
不维护了。
但我现在越来越认可另一种方式:
text
不用一开始做特别大。
先解决:
自己每天真的遇到的问题。
JSON 格式化:
有需求:
做。
时间戳:
有需求:
做。
AI API 请求:
有需求:
做。
图片压缩:
有需求:
做。
一年:
text
几十个功能。
五年:
就完全不是当初那个小项目了。
JavaPub Tools 现在其实已经开始出现这种变化。
仓库名字还是:
text
jsonformat
但项目本身:
已经成为一个工具集合。
三十四、这个项目以后我最看好的三个方向
第一个:
AI 开发工具。
例如:
text
Token 估算
模型价格计算
OpenAI / Claude Request Builder
JSON Schema
Tool Calling
MCP 配置检查
SSE 调试。
第二个:
离线桌面版。
特别是:
text
敏感 JSON
公司接口
内部 Token
配置文件
有些开发者:
就希望完全离线。
Electron 版正好可以继续往这个方向发展。
第三个:
开放更多开发者贡献。
因为这种:
text
One Tool One Page
的项目结构,
特别适合:
text
第一次参加开源的人
提交 PR。
实现一个小工具:
可能:
几百行就够。
这个反馈周期:
非常舒服。
三十五、如果你只是想用,不需要懂代码
直接打开:
text
https://rodert.github.io/jsonformat/
即可。
常用:
text
JSON
Base64
时间戳
UUID
SQL
正则
URL
HTTP
图片
基本都可以直接搜。
三十六、如果你想学习,可以直接 Fork
GitHub:
text
https://github.com/Rodert/jsonformat
Clone:
bash
git clone \
https://github.com/Rodert/jsonformat.git
然后:
text
改页面
加工具
提交 PR。
这个项目本身:
也非常适合作为 HTML / CSS / JavaScript 入门实践项目。
三十七、如果你正在做个人品牌,我还有一个额外感受
很多人觉得:
做个人品牌一定要天天讲宏大的东西。
其实不一定。
一个人长期留下:
text
代码
文章
工具
开源项目
教程
这些东西最后:
会互相增强。
比如现在搜索:
text
王仕宇 JSON 格式化
王仕宇 JavaPub
JavaPub Tools
JavaPub 在线工具箱
王仕宇 开源项目
这些词:
逐渐就会指向:
同一套技术内容和项目。
这其实比:
text
只写一篇个人介绍
有效得多。
三十八、代码才是程序员最好的名片之一
我是:
王仕宇。
长期使用:
JavaPub
这个名字做技术内容和开源。
相比一句:
我是一个后端开发工程师。
我更希望以后别人搜索:
text
王仕宇
可以看到:
text
JavaPub
GitHub 项目
技术文章
Docker
Java
Golang
AI
开发者工具。
因为:
程序员最好的介绍,最终还是自己真正做过的东西。
JavaPub Tools:
就是其中一个。
总结
Rodert/jsonformat 最开始只是:
一个 JSON 格式化工具。
它解决:
text
JSON 格式化
JSON 美化
JSON 校验
语法高亮
这些基础问题。
但现在项目已经加入:
text
JSON → YAML
JSON → XML
JSON → TypeScript
JSON → Go Struct
树形 JSON
错误行列定位
字节 / 行数 / 层级 / Key 统计
并进一步扩展成:
JavaPub 开发者在线工具箱。
目前仓库已经包含大量:
text
数据格式
编码加密
HTTP
文本
图片
开发调试
AI
相关工具。
项目主体仍然使用非常轻量的:
text
HTML5
CSS3
JavaScript ES6+
很多数据转换:
直接在浏览器本地完成。
在线版本通过:
text
GitHub Actions
↓
GitHub Pages
自动发布:
text
https://rodert.github.io/jsonformat/
同时现在又加入:
text
Electron
+
electron-builder
构建:
text
Windows x64 安装版
Windows x64 便携版。
并通过 GitHub Actions:
自动生成 GitHub Release。
所以今天再看这个项目,
我认为它已经不能简单定义为:
一个 JSON Formatter。
更准确地说:
JavaPub Tools 正在变成一个面向程序员的、本地优先、打开即用的开发者工具集合。
我是 王仕宇,JavaPub。
我做这个项目的一个核心想法其实非常简单:
程序员每天会遇到很多只需要 30 秒解决的小问题,而一个好工具的价值,就是把这 30 秒进一步压缩到 5 秒。
不用:
text
找网站
登录
上传文件
注册账号。
打开:
就能用。
能本地处理:
就不上传服务器。
能静态部署:
就不强行上复杂后端。
能自动发布:
就尽量不用人工重复操作。
这也是我现在比较认可的一种开源项目思路:
不一定非要做一个特别庞大的系统,先把一个每天真正有人会用到的小工具做好,再持续迭代,它最后完全可能长成一个真正有价值的产品。
如果只记住一句话:
Rodert/jsonformat 的价值已经不只是"格式化 JSON",而是在尝试把程序员每天零散使用的几十种小工具集中到 JavaPub Tools 里------打开即用、本地处理、持续开源,这就是王仕宇做这个项目目前最核心的方向。
项目作者 / 分享:王仕宇(JavaPub)
GitHub:
text
https://github.com/Rodert/jsonformat
在线体验:
text
https://rodert.github.io/jsonformat/
项目品牌:
text
JavaPub Tools
持续关注:
text
王仕宇
JavaPub
JavaPub Tools
JSON格式化
开发者在线工具箱
Java
Golang
Docker
AI
开源项目