文章摘要
jqfmt 是一个类似于 gofmt 的工具,专为 jq 设计,用于格式化 jq 代码,使其风格统一且易于阅读。该项目托管在 GitHub 上,旨在提升 jq 代码的可维护性和一致性。
文章总结
项目名称:jqfmt - 类似于gofmt,但用于jq
项目简介: jqfmt 是一个用于格式化 jq 表达式的工具,类似于 Go 语言中的 gofmt。它的主要目的是帮助开发者在处理复杂的 jq 表达式时,通过添加合理的换行符来提高代码的可读性。该项目最初是为了解决在命令行中处理长 jq 表达式时的可读性问题而开发的。
开发背景: 作者在处理包含大量 jq 表达式的 shell 脚本时,发现这些表达式往往难以阅读和理解。因此,他决定开发一个工具,能够自动格式化这些表达式,使其更易于阅读。虽然 jq 本身已经是一个格式化工具,但它主要用于格式化 JSON 数据,而不是 jq 表达式。
技术实现: jqfmt 的初始开发基于 itchyny 的 gojq 项目,但由于 gojq 没有提供可遍历的抽象语法树(AST),作者不得不从 gojq 的代码中提取相关部分,并在此基础上进行开发。
安装与使用:
- 安装:可以通过 go install 命令安装 jqfmt。
bash
go install -v github.com/noperator/jqfmt/cmd/jqfmt@latest
- 使用:jqfmt 提供了多种格式化选项,包括格式化数组、对象、操作符等。用户可以通过命令行参数来控制格式化行为。
bash
jqfmt -h
示例:
- 格式化对象:
bash
echo '{one: .two, three: [.four, .five, [.fivetwo, .fivethree]], six: map(select((.seven | .eight | .nine)))}' | jqfmt -ob
输出:
json
{
one: .two,
three: [.four, .five, [.fivetwo, .fivethree]],
six: map(select((.seven | .eight | .nine)))
}
未来计划: - 处理函数定义。 - 在命令行中快速格式化 jq 表达式。
许可证: 该项目采用 MIT 许可证。
致谢: 作者感谢多位开发者对项目的支持和贡献,特别是那些提供了长 jq 表达式的用户,促使他开发了这个工具。
相关链接: - itchyny/gojq - jqlang/jq - wader/jqjq
总结: jqfmt 是一个简单但实用的工具,旨在提高 jq 表达式的可读性,特别适用于处理复杂的命令行脚本。通过自动格式化,开发者可以更轻松地阅读和调试 jq 表达式。
评论总结
评论内容总结:
对jq的积极评价:
- rwiggins表示jq已成为其工作中不可或缺的工具,并分享了一个常用的jq命令来总结文档结构。
- 引用:“jq has become an integral part of work for me.”(jq已成为我工作中不可或缺的一部分。)
- 引用:“I’ll use this opportunity to plug the one-liner I use all the time.”(我将借此机会分享我经常使用的一行命令。)
- rwiggins表示jq已成为其工作中不可或缺的工具,并分享了一个常用的jq命令来总结文档结构。
对jqfmt工具的评价:
- kiitos建议jqfmt默认启用一组常用规则,以便用户无需显式启用每个格式化规则。
- 引用:“It would be better if the tool enabled a common set of rules by default.”(如果工具默认启用一组常用规则会更好。)
- s17n认为如果需要格式化一行命令,可能它不应该是一行命令,但仍赞赏jqfmt的创意。
- 引用:“If you need to format your one-liner, maybe it shouldn’t be a one liner?”(如果需要格式化一行命令,可能它不应该是一行命令?)
- kiitos建议jqfmt默认启用一组常用规则,以便用户无需显式启用每个格式化规则。
对jq的负面评价:
- xmonkee表示对jq的复杂语法感到不满,认为其文档难以理解。
- 引用:“God I really abhor jq and it seems it’s becoming a standard.”(我真的很讨厌jq,但它似乎正在成为标准。)
- 引用:“I dislike it cause I’m too dumb to correctly dredge up it’s incantations.”(我不喜欢它,因为我太笨了,无法正确理解它的咒语。)
- xmonkee表示对jq的复杂语法感到不满,认为其文档难以理解。
其他工具和替代方案:
- mikeocool提到使用fx作为jq的替代工具,认为其提供了更友好的JavaScript接口。
- 引用:“Been using fx (fx.wtf) as alternative to jq recently.”(最近一直在使用fx作为jq的替代工具。)
- noperator提到自己开发了jqfmt工具,并分享了另一个相关工具sol。
- 引用:“I actually wrote jqfmt because I needed it for sol.”(我实际上是因为sol需要才写了jqfmt。)
- mikeocool提到使用fx作为jq的替代工具,认为其提供了更友好的JavaScript接口。
对jqfmt的误解:
- Hendrikto澄清jqfmt是用于格式化jq命令,而不是JSON本身。
- 引用:“This tool formats jq commands, not JSON itself.”(这个工具是用于格式化jq命令,而不是JSON本身。)
- Hendrikto澄清jqfmt是用于格式化jq命令,而不是JSON本身。
总结:评论中对jq的评价褒贬不一,有人赞赏其功能强大,有人则对其复杂语法表示不满。jqfmt工具引发了关于默认规则和实用性的讨论,同时也有用户分享了其他替代工具如fx和sol。