Json

jq - 轉換毫秒

  • June 23, 2018

輸入json:

{
 "id": "3885",
 "login": "050111",
 "lastLoginTime": 1529730115000,
 "lastLoginFrom": "192.168.66.230"
}
{
 "id": "3898",
 "login": "050112",
 "lastLoginTime": null,
 "lastLoginFrom": null
}

當 lastlogintime 存在時過濾器起作用:

$ jq -jr --arg ARG1 050111 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3
user: 050111
lastlogintime: 2018-06-23 05:01 UTC
lastloginfrom: 192.168.66.230

但是當 lastlogintime 不存在時出現問題(不列印“-”):

$ jq -jr --arg ARG1 050112 'select(.login==$ARG1)|"user:", " ",.login,"\n","lastlogintime:", " ",(.lastLoginTime / 1000 | strftime("%Y-%m-%d %H:%M UTC")),"\n","lastloginfrom:", " ",.lastLoginFrom // "-","\n"' test_json3
user: 050112
jq: error (at test_json3:12): null (null) and number (1000) cannot be divided

如何跳過空lastlogintimes的除法操作?

jq -r --arg ARG1 050112 'select(.login == $ARG1)|
   ["user:", .login],
   ["lastlogintime:", if .lastLoginTime then (.lastLoginTime/1000 | strftime("%Y-%m-%d %H:%M UTC")) else "-" end],
   ["lastloginfrom:", .lastLoginFrom // "-"]
   |@tsv' file.json

也就是說,使用顯式if- then-else表示何時lastLoginTime定義或未定義。

引用自:https://unix.stackexchange.com/questions/451509