【问题标题】:How to pass a key to a jq file如何将密钥传递给 jq 文件
【发布时间】:2019-07-19 15:10:31
【问题描述】:

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

我希望脚本内容也类似:

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

然后像这样调用它

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

无论我尝试过什么,参数总是以字符串结尾,不能用作键。

【问题讨论】:

    标签: json key parameter-passing jq


    【解决方案1】:

    由于您还没有关注minimal complete verifiable example 指导方针,很难知道解决问题的最佳方法是什么,但是无论您采用哪种方法,重要的是要记住 --arg 始终传入 JSON 字符串。它不能用于传入 jq 程序片段,除非片段是 JSON 字符串。

    让我们考虑一个选项:传入一个 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}'
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 1970-01-01
      • 2021-11-15
      • 2017-12-16
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      相关资源
      最近更新 更多