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

无法基于日期字段过滤JSON输出的技术求助

问题

我有若干JSON格式的数据,需要根据指定日期字段过滤输出,仅提取满足条件的数据块。执行命令cat json_data | jq "." | jq 'select(.updated_on > 2023-01-17)'后,仍返回所有数据,未实现预期筛选效果。

JSON数据示例:

{
  "comment_count": 0,
  "task_count": 0,
  "type": "pullrequest",
  "id": 3,
  "title": "Fix/adding jacoco",
  "state": "MERGED",
  "reason": "",
  "created_on": "2023-02-08T05:17:49.292686+00:00",
  "updated_on": "2023-02-08T08:55:02.565205+00:00"
}
{
  "comment_count": 0,
  "task_count": 0,
  "type": "pullrequest",
  "id": 2,
  "title": "Fix/adding jacoco",
  "state": "MERGED",
  "reason": "",
  "created_on": "2023-01-08T05:17:49.292686+00:00",
  "updated_on": "2023-01-08T08:55:02.565205+00:00"
}
{
  "comment_count": 0,
  "task_count": 0,
  "type": "pullrequest",
  "id": 1,
  "title": "Fix/adding jacoco",
  "state": "MERGED",
  "reason": "",
  "created_on": "2022-02-08T05:17:49.292686+00:00",
  "updated_on": "2022-02-08T08:55:02.565205+00:00"
}
解决方法
  • 核心错误:日期未作为字符串处理
    命令中的2023-01-17没有加引号,jq会将其解析为数学运算(2023-1-17=2005),而.updated_on是字符串类型,字符串与数字的比较逻辑不符合预期,导致所有数据都被保留。

  • 正确命令
    将日期用双引号包裹,同时省去多余的jq "."调用:

    jq 'select(.updated_on > "2023-01-17")' json_data
    

    或者通过管道处理:

    cat json_data | jq 'select(.updated_on > "2023-01-17")'
    
  • 原理说明
    你的JSON中日期是ISO 8601格式(YYYY-MM-DDTHH:MM:SS...),这种格式的字符串按字典序比较的结果和时间顺序一致,所以直接用字符串比较就能正确筛选出更新时间晚于2023-01-17的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:42