jq null unix时间戳解析问题

问题描述 投票:1回答:1

我正在尝试解析使用curl收到的一个大json文件。

通过跟随this answe r,我可以解析下一个文件:

$ cat test.json 
{"items": [{"id": 110, "date1": 1590590723, "date2": 1590110000, "name": "somename"}]}

使用下一个命令:

TZ=Europe/Kyiv jq -r '.[] | .[] | .name + "; " + (.date1|strftime("%B %d %Y %I:%M%p")) + "; " + (.date2|strftime("%B %d %Y %I:%M%p"))' test.json

输出为:

somename; May 27 2020 02:45PM; May 22 2020 01:13AM

但是当我尝试使用相同的命令解析下一个文件时:

$ cat test2.json 
{"items": [{"id": 110, "date1": 1590590723, "date2": null, "name": "somename"}]}

输出为:

jq: error (at test2.json:1): strftime/1 requires parsed datetime inputs

我可以在解析之前使用sed将这些空值替换为一些有效值。但是也许有更好的方法跳过(忽略)这些值,在输出中保留空值:

somename; May 27 2020 02:45PM; null
jq unix-timestamp strftime
1个回答
0
投票

您可以调整jq程序,使其显示为:

def tod: if type=="number" then strftime("%B %d %Y %I:%M%p") else tostring end;

.[] | .[] | .name + "; " + (.date1|tod) + "; " + (.date2|tod)

另一种选择是:

def tod: if type=="number" then strftime("%B %d %Y %I:%M%p") else . end;

.[] | .[] | "\(.name); \(.date1|tod); \(.date2|tod)"
© www.soinside.com 2019 - 2024. All rights reserved.