开发者发布终端工具,可查看 JSON、YAML、CSV、XML 等纯文本数据文件
来源标题:Show HN: A terminal viewer for plain text data files (JSON,YAML,CSV,XML,)
开发者推出了一款终端查看器,用于浏览 JSON、YAML、CSV、XML 等纯文本数据文件。该项目源于作者阅读 OpenAPI 规范时对 jless 的不满,后者无法在文件变动后保留阅读位置,且一次只能加载一个文件。作者借助 AI 编码模型扩展了功能,并自行开发了支持注释和尾随逗号的 JSON 解析器。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
刚开始上手 OpenAPI 规范时,我很快就发现,用编辑器去读大卷大卷深度嵌套的 JSON,那体验真是糟糕透顶。于是我去找有没有能帮上忙的工具,偶然发现了 https://jless.io ——这是个超棒的终端应用,专门用来浏览那种让人头大的 JSON 文档。我永远感激 Paul Martinez 写了这个工具。
但它确实有一些缺口。它没法在文件变更后重新加载,同时保持你在 JSON 结构中的位置,而这是我非常需要的。而且它一次只能加载一个文件。可惜它是用 Rust 写的,我不懂 Rust,而在前 AI 时代,这基本就是个巨大的拦路虎。
当然,等到我们有了能真正写出像样代码的模型之后,一个显而易见的主意冒了出来——我干脆把自己的功能加上去,提个 PR 不就行了!美好时光。只不过到那个阶段,我的需求已经膨胀了——我还得处理很多其他文件格式,比如 CSV、TOML、INI,甚至 XML。于是我跑偏去扩展另一个副项目了——一个随和的 JSON 解析器,支持注释、尾随逗号这类常见东西。
新冠期间,我那个做活动行业的 SaaS 创业公司摇摇欲坠,我想找点事来分散注意力,决定重构这个随和的小 JSON 解析器。它用的是生成的解析器,很慢。我读了一些博客文章,说所有生产级语言解析器基本都是手写的递归下降,我就想,这能有多难!
五年后,经过许许多多有趣的实验和生产环境的使用,我最终做出了一个运行时解析器系统:https://tabnas.dev 这是一种古怪的解析方法,部分是递归下降,部分是状态机,主要还是经验性的折腾。它能用,而且相当快,我在真实项目里用它。它有个很好的特性:文法是动态的——你不生成代码,文法是直接执行的。像是一个花哨的正则引擎,但升级到能把任何东西解析成正规的抽象语法树。
现在有了这个,我可以回到最初的项目,做我自己的 jless 版本,解决我那些真正想挠的痒处:watch 模式;多标签页;把任何数据格式加载成树结构。
我现在依然不懂 Rust。我是说,我挺喜欢这个想法,但一天只有那么多小时。不过现在我们有 AI 了,所以我现在真能进糖果店了。把 jless.io、tabnas.dev 和我的需求结合起来,我构建了(或者说,使之被构建了?)aless —— 适用于任何格式的 less!
这也是对 tabnas 解析引擎的一次很好的压力测试,我对此也很满意。
所以,如果你需要在命令行上审阅大量数据结构文件,需要一个终端应用来做这件事,这个就是为你准备的。不过我不禁被其中的讽刺意味触动——现在对这种东西的需求已经小多了,我现在大多让 agent 去看大型 JSON 文档。不过,我们那点可怜的人类大脑有时还是需要帮助的,这让我在需要时能审阅文档。
而且,看到现在把开源组件拼起来、做出本质上属于个人软件的东西是多么容易,这真的很好、很满足。
但我认为这个小项目最关键的一点是,软件开发的基本物理规律依然没变。软件应该由组件粘合而成。组件应该有定义良好的接口。目标是降低认知负荷——这对人和机器都有用。
是的,整个东西完全可以从零开始、按一份文本规范构建出来,变成一团过度工程化的 AI 垃圾,而且照样完全能用。但我实际构建它的方式——把 AI 当作编码伙伴、使用组件——让我深感满足,因为我仍然理解代码的本质,同时能忽略那些偶然的复杂性。组件给了你另一层抽象,要想的东西更少,这让你的人类大脑能继续留在局中。
评论 URL:https://news.ycombinator.com/item?id=50382213 点数:1 评论数:0
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。