gpt4 book ai didi

json - 如何使用 jq 从 JSON 字符串中选择日期范围?

转载 作者:行者123 更新时间:2023-12-04 20:00:22 26 4
gpt4 key购买 nike

我有一个像这样的 JSON 字符串(MacOS):

[{
"id": 3624,
"created_at": "2016-10-21T20:51:16.000+08:00",
},
{
"id": 3625,
"created_at": "2016-10-22T08:09:16.000+08:00",
},
{
"id": 3626,
"created_at": "2016-10-23T09:19:55.000+08:00",
}]

我想从“2016-10-21”到“2016-10-22”中选择“created_at”;
我想得到这样的结果:
[{
"id": 3624,
"created_at": "2016-10-21T20:51:16.000+08:00",
},
{
"id": 3625,
"created_at": "2016-10-22T08:09:16.000+08:00",
}]

有人可以指出我正确的方向吗?

问题已经解决了。
现在,我使用此代码选择精确到分钟的日期,我希望它对其他人有用:
jq --arg s '2016-10-26T18:16' --arg e '2016-10-27T20:24' '[($s, $e) | strptime("%Y-%m-%dT%H:%M") | mktime] as $r
| map(select(
(.updated_at[:19] | strptime("%Y-%m-%dT%H:%M:%S") | mktime) as $d
| $d >= $r[0] and $d <= $r[1]))' <<< "$requestJson"

最佳答案

对于更强大的解决方案,最好解析日期以获取其组件并比较这些组件。你能得到的最接近的是使用 strptime/1解析返回其组件数组的日期。然后比较组件以检查它是否在范围内。
strptime的数组返回是组成部分:

year (%Y)
month (%m)
date (%d)
hours (%H)
minutes (%M)
seconds (%S)
day of week (%w)
day of year (%j)

由于您只比较日期,因此比较应该只查看前 3 个组件。
$ jq --arg s '2016-10-21' --arg e '2016-10-22' '
[($s, $e) | strptime("%Y-%m-%d")[0:3]] as $r
| map(select(
(.created_at[:19] | strptime("%Y-%m-%dT%H:%M:%S")[0:3]) as $d
| $d >= $r[0] and $d <= $r[1]
))
' input.json

由于您在 Mac 上运行,我希望您可以在构建中使用这些方法。您可能需要对日期格式进行调整才能按预期工作。正如您在评论中看到的那样,我们必须对其进行一些按摩才能使其发挥作用。

关于json - 如何使用 jq 从 JSON 字符串中选择日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40210276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com