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

如何使用jq无需中间变量获取数组匹配元素的前一项?

用jq单命令获取数组中指定元素的前一个元素

假设你的JSON数据结构如下(示例):

{
  "versions": ["1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0"]
}

基础实现(无边界处理)

直接用一行jq命令就能完成,不需要中间变量:

jq --arg VERSION "2.0.0" '.versions | .[index($VERSION) - 1]' your-input.json

执行后会返回"1.2.0",也就是指定版本的前一个元素。

带边界处理的版本

如果需要处理指定版本不存在或者是数组第一个元素的情况(避免索引越界返回无意义结果),可以加个判断逻辑:

jq --arg VERSION "1.0.0" '
  .versions 
  | (index($VERSION) // 0) as $idx 
  | if $idx > 0 then .[$idx - 1] else null end
' your-input.json

这个版本中:

  • 如果指定版本不存在,index($VERSION)返回null,// 0会把索引设为0,最终返回null
  • 如果指定版本是第一个元素,同样返回null
  • 正常情况返回前一个元素

关键逻辑说明

  • --arg VERSION "xxx":把外部传入的版本号作为jq内部变量$VERSION使用
  • index($VERSION):查找指定元素在数组中的索引位置
  • .[$idx - 1]:通过索引减1获取前一个元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:30:47