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

如何使用jq按startTime字段排序、按name过滤提取dataCenter

需求说明

需要对JSON数组完成三步处理:

  • 按startTime日期时间字段排序
  • 基于name属性做匹配过滤
  • 仅提取匹配记录中的dataCenter字段值
    之前尝试执行命令jq '.[]|= sort_by(.startTime)'未得到预期结果。
错误原因

sort_by是jq的数组排序函数,必须直接传入数组作为输入才能生效。原命令中.[]|=会先把数组拆分为单个对象元素,再对每个独立对象调用排序逻辑,完全不符合排序函数的输入要求,自然无法得到正确结果。

正确jq命令

精确匹配name值场景

如果需要筛选name完全等于指定值的记录(示例中匹配值为JPCSKELT),命令如下:

jq 'sort_by(.startTime)[] | select(.name == "JPCSKELT") | .dataCenter' input.json

命令逻辑拆解

  • sort_by(.startTime):直接对根数组按startTime字段升序排序。由于数据中startTime是年-月-日 时:分:秒格式的字符串,字典序和时间先后顺序完全一致,无需额外做时间格式转换
  • []:将排序后的数组拆分为单条记录,供后续逐行过滤
  • select(.name == "JPCSKELT"):筛选出name属性完全匹配目标值的记录,如需模糊匹配可替换为select(.name | test("匹配关键词"))支持正则匹配
  • .dataCenter:提取符合条件记录的dataCenter字段值

扩展:返回去重后的dataCenter结果

如果需要对提取出的dataCenter去重,可使用如下命令:

jq 'map(sort_by(.startTime)[] | select(.name == "JPCSKELT") | .dataCenter) | unique' input.json
示例运行结果

基于提供的测试数据,执行精确匹配命令后输出如下:

"mvsADM"
"mvsADM"
"mvsADM"

结果顺序对应startTime从早到晚的三条匹配记录,符合处理要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:42:07