无法基于日期字段过滤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
相关产品推荐
相关产品推荐

