受老哥们 Rust 重构一切的思潮感召,加上工作需要,上周用 Codex 搓了一个纯 Rust 实现的开源小工具 FerrisJson ,主要面向 大 JSON 文件的浏览、搜索和 JSONPath 查询 。文件大了之后,除了能打开,更希望能快速定位字段、筛选数据、查看嵌套结构,再把需要的部分提取出来。
FerrisJson 主要围绕这些需求开发,所有数据处理在本地完成,无需上传,也不需要账号。交互设计和 UI 参考了 fx 和 JSONBolt 。
按我目前的使用和实测, 相比 fx ,FerrisJson 更节省内存,JSONPath 查询也快得多;相比 JSONBolt ,多了 JSONPath 查询和多语言 JSON 内容查看支持。不过,打开文件的速度和非 JsonPath 查询比 JSONBolt 慢很多,加载速度和内存占用仍有优化空间。
用一个 300 MB 、包含各类 JSON 数据类型的随机生成文件 做了本地实测: 项目 实测结果 内存占用 约 1.3 GB 打开文件,含 JSONPath 建索引 约 6.5 秒 搜索首批匹配结果上屏,含正则 50 ms 内 完成整份文件搜索 约 2 秒 这里的 50 ms 指首批匹配结果可见,完整搜索约需 2 秒。以上是当前本地样本的结果,实际表现会随文件结构、查询条件和机器配置变化。
目前支持: 大文件结构浏览 :树形展开与折叠、值预览、复制路径、导出子树,另有可选文件索引和实验性稀疏索引、分页树。搜索与筛选 :按键名或值搜索、正则匹配、JSONPath / JSON Pointer 查询,支持结果定位与导出。
键盘操作 :Vim 风格导航、数字前缀、相对行号和浏览历史。桌面与终端使用 :Windows / macOS 提供桌面界面,Linux 使用终端界面,macOS 也可选终端版;同时提供 CLI 。
当前版本 0.8.0 ,采用 GPL-3.0-or-later 开源,还在持续完善大文件体验和跨平台支持。项目地址: GitHub:bugfree314/FerrisJson 感慨一下: AI 真好用啊,我只给了一句话加两个链接,半小时就完成了勉强能用的初版原型。
但优化速度和内存占用花了近一周,重置了两轮额度。我全程一行代码没写,但因为不太懂这个领域,优化方面还是有点力竭。
诚邀大家使用,如果大家有好的优化建议,欢迎提 issue 和 PR (在线蹲大佬)。