如何将密钥传递到jq文件

时间:2019-07-19 15:10:31

标签: jq

我想编写一个简单的jq文件,该文件可以让我计算按指定键分组的项目。

我希望脚本内容也类似:

group_by($group) | map({group: $group, cnt: length})

并调用它类似

cat my.json | jq --from-file count_by.jq --args group .header.messageType

无论我尝试了什么,该参数始终以字符串结尾,不能用作键。

1 个答案:

答案 0 :(得分:1)

由于您未遵循minimal complete verifiable example 准则,要知道解决问题的最佳方法是有点困难,但是无论采用哪种方法,都必须牢记--arg始终以JSON字符串传递。除非片段是JSON字符串,否则不能用于传递jq程序片段。

因此,我们考虑一个选项:传递一个JSON对象,该对象表示可以在程序中使用的路径。

因此调用可以是:

jq -f count_by.jq --argjson group '["header", "messageType"]'

,程序将以:

开头
group_by(getpath($group)) | ...

吃你的蛋糕...

如果您真的想传递诸如.header.messageType之类的参数,则有一种方法:将字符串$ group转换为jq路径:

($group|split(".")|map(select(length>0))) as $path

因此,您的jq过滤器将如下所示:

($group|split(".")|map(select(length>0))) as $path
| group_by(getpath($path)) | map({group: $group, cnt: length})

Shell字符串插值

如果您想要快速的bash解决方案,但需要注意许多事项:

group=".header.messageType"
jq 'group_by('"$group"') | map({group: "'"$group"'", cnt: length}'