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

使用jq解析JSON获取最新任务的内容翻译及技术问询规整需求

针对jq提取最新任务执行记录的问题解答

一、问题背景

我有一个包含多任务执行记录的JSON文件,尝试使用以下jq命令筛选出job.name不为空的执行记录,并按id倒序排序后获取最新的一条任务数据:

.[ .executions[] | select(.job.name != null) | select(.job.name) ] | sort_by(.id) | reverse | .[0]

执行该命令后,得到的最新任务JSON片段如下:

{
"argstring": null,
"date-ended": { "date": "2018-04-03T17:43:38Z", "unixtime": 1522777418397 },
"date-started": { "date": "2018-04-03T17:43:34Z", "unixtime": 1522777414646 },
"description": "",
"executionType": "user",
"failedNodes": [ "172.30.61.88" ],
"href": "http:...
}

接下来针对命令的正确性、优化方向以及失败任务的处理逻辑给出解答:

二、命令正确性与优化建议

你的jq命令核心逻辑是成立的,但有几个可以优化的细节:

  • 简化筛选条件:select(.job.name != null) | select(.job.name)属于冗余写法,在jq中非空字符串、非空数组等会被直接判定为true,所以直接用select(.job.name)就能过滤掉job.name为null或空值的记录。
  • 优化排序逻辑:sort_by(.id) | reverse可以替换为sort_by(-.id),直接按id降序排序,代码更简洁高效。
  • 修正命令格式:原命令末尾的' 1.json是指定输入文件为1.json,正确的完整命令应该是:
jq '.[ .executions[] | select(.job.name) ] | sort_by(-.id) | .[0]' 1.json

三、失败任务的定制化处理

如果需要针对包含failedNodes的任务做特殊处理,可以添加额外筛选逻辑:

  • 仅提取最新的失败任务:
jq '.[ .executions[] | select(.job.name) | select(.failedNodes != null and .failedNodes | length > 0) ] | sort_by(-.id) | .[0]' 1.json
  • 给任务添加失败标记:如果需要在结果中明确标注任务状态,可以新增计算字段:
jq '.[ .executions[] | select(.job.name) | . + {isFailed: (.failedNodes != null and .failedNodes | length > 0)} ] | sort_by(-.id) | .[0]' 1.json

四、补充说明

如果你的JSON文件顶层结构就是executions数组(而非嵌套在某个对象下),那么可以去掉命令开头的.[,简化为:

jq '.[] | select(.job.name) | sort_by(-.id) | .[0]' 1.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:26:02