jq null unix 时间戳解析问题
jq null unix timestamps parsing issue
我正在尝试解析我使用 curl 收到的一个大 json 文件。
通过关注 this answer 我可以解析下一个文件:
$ 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 程序,使其显示为:
def tod: if type=="number" then strftime("%B %d %Y %I:%M%p") else tostring end;
.[] | .[] | .name + "; " + (.date1|tod) + "; " + (.date2|tod)
另一种选择是:
def tod: (tonumber? | strftime("%B %d %Y %I:%M%p")) // null;
.[] | .[] | "\(.name); \(.date1|tod); \(.date2|tod)"
我正在尝试解析我使用 curl 收到的一个大 json 文件。
通过关注 this answer 我可以解析下一个文件:
$ 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 程序,使其显示为:
def tod: if type=="number" then strftime("%B %d %Y %I:%M%p") else tostring end;
.[] | .[] | .name + "; " + (.date1|tod) + "; " + (.date2|tod)
另一种选择是:
def tod: (tonumber? | strftime("%B %d %Y %I:%M%p")) // null;
.[] | .[] | "\(.name); \(.date1|tod); \(.date2|tod)"