优秀的编程知识分享平台

网站首页 > 技术文章 正文

失联Jq项目重生了,发布新版本jq 1.7

nanyue 2024-10-23 12:02:25 技术文章 2 ℃

一个好消息,大家都在用的著名开源项目jq,在断更五年之后,在github又发布了一个新版本1.7。同时项目的组织、源码托管和维护者都又发生了更新。一个生机勃勃的jq获得新生,将常规进行开发和版本迭代。对于新的变化请让虫虫给你一一道来。




项目变化

自上一个稳定版本(jq v1.6,发布于2018年)变化:

jq源代码目前托管于Github:github/jqlang

招募新的维护人员、管理员和所有者。目前维护者列表为:

NEWS文件替换为Markdown格式的NEWS.md。

CI、扫描构建、发布、网站构建等使用GitHub Acton。

许多文档改进和修复。

网站更新了新的部分搜索框、更好的链接部分 ID、深色模式等。在网站目前为一个在线jq在线解析器:

新版本发布支持多平台,包括(不限于):

Linux amd64, arm64, armel, armhf, i386, mips, mips64, mips64el, mips64r6, mips64r6el, mipsel, mipsr6, mipsr6el, powerpc, ppc64el, riscv64和 s390x
Mac amd64和 arm64
Windows i386和 amd64
Docker linux/386, linux/amd64, linux/arm64, linux/mips64le, linux/ppc64le, linux/riscv64和 linux/s390x

Docker镜像源由Docker Hub更换为ghcr.io/jqlang/jq。

新增加OSS-模糊测试。

命令行(CLI)变化

使用JQ_COLORS环境变量可配置对象键颜色。

比如下面代码,将渲染field为黄色粗体 (`1;33`, the last value)

$JQ_COLORS="0;90:0;37:0;37:0;37:0;32:1;37:1;37:1;33" ./jq -n

将默认颜色null更改为亮黑色。

尊重NO_COLOR用于禁用颜色输出的环境变量。

改进 --help输出。可以显示所有选项,并且以更好的顺序展示。

使用--exit-code/ -e选项修复退出代码的多个问题。

true样式结束风格时候,最后返回值为0

false样式结束风格时候,最后返回值为1

没有值时候,返回4

添加 --binary/ -b在Windows上用于二进制输出。要得到\n代替\r\n行结尾。

添加 --raw-output0用于 NUL(零字节)分隔输出。

# 用0填充

#也可以使用xargs -0

可以自定义其他格式,比如”[]”

$jq -n --raw-output0 '"a b c", "d\ne\nf"' | xargs -0 printf '[%s]\n'

# 当字符串中包含一个Null分隔符时候,字符串包含Null字符会报错。

修复断言崩溃并验证 JSON --jsonarg。

删除已用的--argfile选项。

启用堆栈保护。

语言变化

使用十进制数字文本,可以保持精度。比较运算支持高精度,但算术运算可能会被截断。

比较运算时候,支持高精度(JavaScript等语言中会为false)

在sort中也支持

# 下算数运算中可能会被截断(和JavaScript等类似)

添加新的内置pick(stream)用来对输入对象或数组的映射。

添加新的内置debug(msgs)函数,效果为在写入stderr之前对输入应用过滤器。

添加新的内置scan($re; $flags)。

忽略大消息查找

添加新的内置ab求绝对值。这可能允许将数字的字面值保留length和fabs转换为浮点数。

允许if没有else-分支。当跳过else-分支时为.。

将1变为one

也可以这样写

支持elif

允许使用$binding作为文本对象中的键。

之前版本则,必须要带括号

使用时允许在链接索引之间使用点 .["index"]

新版本中,可以这样写:

允许链式值迭代器使用点 .[], .[]?

jq -n '{"a": [123]} | .a[]'
123

可以直接这样写:

jq -n '{"a": [123]} | .a.[]'
123

修复try/catch捕获过多的问题。

加速和重构一些内置函数,也删除 scalars_or_empty/0。

现在 halt和 halt_error立即退出而不是继续下一个输入。

使用对数组分配空来修复删除问题。

比如对所有大于2的值分配为空:

jq -c '(.[] | select(. >= 2)) |= empty' <<< '[1,5,3,0,7]'

其他问题修复

还有大量的修复的问题,请参考官方文档。

最近发表
标签列表