字符串工具 V2 是一个面向日常开发场景的 Electron 托盘工具,核心能力是对剪贴板文本进行快速识别与转换。应用启动后默认常驻系统托盘,使用快捷键 Ctrl+Alt+D 即可唤醒。
窗口弹出后会自动读取当前剪贴板内容,并根据内置处理器的匹配分数自动选中最合适的功能。按下 Enter 或点击按钮即可执行转换,结果会自动写回编辑区并同步复制到剪贴板。
这个项目特别适合下面这些高频场景:
- SQL 清洗:批量处理
DataGrip导出的UPDATE / INSERT语句 - MyBatis 还原:从注解或日志中提取可执行 SQL
- JSON 辅助处理:字段抽取、结构预览、对象差异对比
- 文本整理:排序去重、ID 拼接、命名风格转换
- 私有工具扩展:通过用户脚本把团队内部的小工具挂进侧边栏
- 复制文本:先把待处理内容放到剪贴板
- 唤醒窗口:按默认快捷键
Ctrl+Alt+D - 确认功能:程序会自动选中一个处理器,你也可以点击左侧图标手动切换
- 执行处理:按
Enter或点击界面按钮 - 拿到结果:转换后的文本会自动复制回剪贴板
补充说明:
- 窗口行为:按
Esc或切走焦点时窗口会自动隐藏 - 托盘菜单:可控制功能显隐、设置开机启动、修改快捷键、打开用户脚本目录
- 无联网依赖:运行阶段的 JSON 预览服务均在本地启动
项目在启动时会尝试拉起两个本地 HTTP 服务,无需依赖公网:
说明:
- JSON 预览:会优先尝试打开
jsonhero,同时也会打开jsoncrack - JSON Diff:输入必须是一个包含两个对象的 JSON 数组,例如
[{...}, {...}] - VS Code 依赖:
JSON Diff建议本机已安装VS Code,并可使用code命令
前往 Releases 页面下载对应平台安装包:
- Windows:
setup.exe - macOS (Intel):
*-x64.dmg - macOS (Apple Silicon):
*-arm64.dmg - Linux:
*.AppImage
# 安装依赖
npm install
# 启动桌面应用
npm start如果你是首次克隆仓库,则需要拉取 jsoncrack / jsonhero 资源,执行命令如下:
# 拉取/更新本地 JSONHero 发行产物
npm run fetch:jsonhero
# 下载并构建 JSONCrack 静态资源
npm run build:jsoncrack# 打包安装文件(不发布)
npm run build
# 仅输出目录结构,便于本地检查
npm run app:dirsrc/
main.js Electron 主进程入口
tray.js 托盘菜单、开机启动、快捷键设置
jsoncrack-starter.js 本地 JSONCrack 服务启动器
jsonhero-starter.js 本地 JSONHero 服务启动器
page/ 主界面页面资源
script/preload.mjs 剪贴板读取、处理器注册、执行流程
script/texthandler/ 内置文本处理器
scripts/
build-jsoncrack.js 下载并构建 JSONCrack 静态资源
fetch-jsonhero.js 拉取 JSONHero 发布产物
.github/workflows/
build.yml 多平台构建与 Release 发布流程
仓库已经配置 GitHub Actions 自动发布流程:
- 触发条件:向
master分支推送代码 - 版本判断:比较
package.json的版本号与最新v*tag - 构建平台:Windows、Linux、macOS x64、macOS arm64
- 发布结果:自动打 tag、上传构建产物并创建 GitHub Release
项目支持把自定义处理器挂到侧边栏中。应用启动时会扫描用户数据目录下的 user-scripts 文件夹,并自动加载其中的脚本。
最方便的方式是直接通过托盘菜单中的 “打开用户脚本目录” 找到这个目录。
注意:新增或修改脚本后需要重启应用,因为扫描逻辑发生在应用启动阶段。
每个脚本需要配套一个同名的 .svg 图标文件,并和脚本放在同一目录下。例如:
- 脚本:
my-tool.js - 图标:
my-tool.svg
图标会显示在侧边工具栏中,solver.name 也会作为图标和样式的唯一标识。
每个脚本必须导出一个 solver 对象,包含以下字段:
const solver = {
name: "my-tool", // 唯一标识,同时用于匹配图标(my-tool.svg)
describe: "我的工具", // 描述文本,显示为图标的 alt 提示
nextStep: "id-join", // 可选,处理完成后自动切换到指定处理器
style: ".my-tool {}", // 可选,注入到页面的 CSS
};
// check(logs, arr, jsonFlag) → number
// 判断当前文本和当前处理器的匹配程度,数值越大越容易被自动选中
// logs: 原始文本
// - arr: 按换行符分割后的数组
// - jsonFlag: 文本是否为 JSON 格式
solver.check = (logs, arr, jsonFlag) => {
return arr.length > 0 && !jsonFlag ? 100 : 0;
};
// transfer(logs, arr, jsonFlag) → string
// 执行实际处理,返回结果文本(会自动写入剪贴板)
// 参数同 check
solver.transfer = (logs, arr, jsonFlag) => {
return arr.join(",");
};
export { solver };脚本运行时,应用会预注入以下能力:
require:可直接加载应用已安装的依赖CryptoJS:来自crypto-jsnodeCrypto:Node.jscryptoforge:来自node-forge
建议约定:
name:保持简短且稳定,会影响图标匹配和功能标识check:只负责判断匹配度,不要在这里做重计算或副作用操作transfer:返回最终文本;返回值会被写入编辑区并复制到剪贴板nextStep:适合串联流程,例如“抽取 -> 去重 -> 拼接”
| 依赖 | 用途 |
|---|---|
| electron | 桌面应用外壳、托盘、全局快捷键、窗口管理 |
| electron-builder | 多平台安装包构建 |
| express | 内嵌 jsoncrack 本地 HTTP 服务 |
| electron-store | 持久化配置,如快捷键、功能显隐、开机启动 |
| json-bigint | 处理包含大整数的 JSON 数据 |
| bignumber.js | 数值排序时保持精度 |
| lru-cache | 缓存传给 jsoncrack 的 JSON 数据 |
| electron-log | 记录主进程与渲染进程日志 |
| crypto-js / node-forge | 为自定义脚本和加解密相关场景提供能力 |









