You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq-1.5为JSON数组生成运行计数器(索引)

用jq-1.5为JSON数组生成带递增索引的输出

我懂你的需求:已经能把JSON里的字符串拆成名字列表,但想给每个名字加上从1开始的运行计数器,之前用--arg尝试递增没成功对吧?咱们直接用jq内置的数组操作就能搞定,不用绕外部变量的弯子。

先回顾你的原始数据和已有的操作:
原始JSON:

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

你已经实现拆分的命令:

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

输出是每行一个名字,但咱们要的是一行里每个名字带对应的序号。

解决方案:用split() + to_entries + map() + join()

直接用这条命令就能得到你想要的格式:

echo '{"Actors": "Tom,Dick,Mary"}' | jq --raw-output '.Actors | split(",") | to_entries | map("\(.value) \(.key + 1)") | join(" ")'

输出结果就是:

Tom 1 Dick 2 Mary 3

一步步解释命令逻辑:

  • .Actors | split(","):把Actors字段的字符串按逗号拆分,直接得到数组["Tom","Dick","Mary"];
  • to_entries:将数组转换为包含索引和值的对象数组,比如第一个元素会变成{"key":0,"value":"Tom"}(这里key是从0开始的数组索引);
  • map("\(.value) \(.key + 1)"):遍历每个对象,把名字和索引+1(让计数从1开始)拼接成字符串,得到数组["Tom 1","Dick 2","Mary 3"];
  • join(" "):把数组里的所有字符串用空格连接成一行,完美输出你要的格式。

为什么不用--arg?

--arg主要是用来从外部给jq传递静态变量的,不太适合在jq内部处理动态递增的计数器。用jq内置的数组和遍历操作,既能保持逻辑清晰,又能避免外部命令的额外处理。

内容的提问来源于stack exchange,提问作者user1822391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:14:37