我有一些看起来像这样的json
{
"users":[ {
"id":8734,
"last_login":"2016-10-04T06:59:40Z"
},
{
"id":9376,
"last_login":"2016-05-04T20:37:32Z"
},
{
"id":9376,
"last_login":null
}
]}
我想返回上次登录日期为>的ID 90天所以在这种情况下它应该只返回9376.我在想我需要将fromdateiso8601与select结合使用,但是在使用语法时遇到一些麻烦。
这似乎有效
.users[] | select ( .last_login | fromdateiso8601 > 1475625600) | .id
但我还是得到了
jq: error (at <stdin>:0): strptime/1 requires string inputs and arguments
如何处理null,理想情况下,这些将包含在结果中。
答案 0 :(得分:3)
只需添加适当的空检查。
.users[] | select (.last_login | . == null or fromdateiso8601 > 1475625600).id
答案 1 :(得分:1)
防止.last_login空值的一种方法如下:
.users[]
| select ( .last_login // empty | fromdateiso8601 > 1475625600)
| .id
为清楚起见,我添加了括号,例如:
.users[]
| select ( (.last_login // empty) | fromdateiso8601 > 1475625600)
| .id
或者更具防御性,请使用?
:
.users[]
| select ( .last_login | fromdateiso8601? > 1475625600)
| .id
如果要包含.last_login评估为null
的项目,那么您可以使用Jeff建议的过滤器,或者可能:
(.last_login | fromdateiso8601? > 1475625600) // true
P.S。对于&#34;之前90天,以Unix纪元开始后的秒数表示&#34;,您可以使用:
def daysAgo(days): (now | floor) - (days * 86400);