【问题标题】:Running counter for JSON array using jq使用 jq 运行 JSON 数组的计数器
【发布时间】:2018-11-06 13:00:03
【问题描述】:

我正在使用jq-1.5。我想为 JSON 数组发出一个运行计数器(即索引)。

我的 JSON 是:

{"Actors": "Tom,Dick,Mary"}

我可以使用splits() 将字符串拆分为一个数组:

echo '{"Actors": "Tom,Dick,Mary"}' | jq --raw-output '. | ( .Actors | splits( "," ) )'
Tom
Dick
Mary

它如何为每个元素创建一个运行计数器?我曾尝试使用--arg,但似乎无法让它增加。

我想要:

Tom    1
Dick   2
Mary   3

【问题讨论】:

    标签: arrays json bash jq


    【解决方案1】:

    您可以使用to_entries。试试这个:

    echo '{"Actors": "Tom,Dick,Mary"}' | jq -r '[.Actors | splits(",")] | to_entries | map("\(.value) \(1 + .key)") | .[]' | column -t -o"   "
    

    我添加了| column -t -o" ",我不知道如何用jq 格式化列。

    【讨论】:

    • 谢谢。这正是我一直在寻找的。我通过使用制表符分隔列来格式化列。
    【解决方案2】:

    可以使用@tsv 生成 TSV 输出。使用给定的输入,

    jq -r '.Actors | split(",") | to_entries[] | [.value,.key] | @tsv'
    

    产生:

    Tom 0
    Dick    1
    Mary    2
    

    如果您想要基于 1 的索引,请将上面的 .key 替换为 1 + .key

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      相关资源
      最近更新 更多