使用jq运行JSON数组的计数器

时间:2018-05-28 00:43:09

标签: arrays json bash jq

我正在使用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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

产生

Tom 0
Dick    1
Mary    2

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