Json

jq - 為空值列印“-”

  • April 30, 2022

輸入json:

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

我想以製表符分隔格式獲取登錄、lastLoginTime 和 lastLoginFrom 的輸出:

050111  1529730115000   192.168.66.230
050112              -                -

使用下面的 jq 過濾器,我得到的輸出沒有“空”值,我可以用“-”替換

$ jq -r '.|[.login, .lastLoginTime, .lastLoginFrom]|@tsv' test_json
050111  1529730115000   192.168.66.230
050112

有沒有其他方法可以為這些空值列印“-”?

使用替代運算符//

所以 :

$jq -r '.|[.login, .lastLoginTime // "-" , .lastLoginFrom // "-" ]|@tsv' test_json
050111  1529730115000   192.168.66.230
050112  -   -

這是使用與EchoMike444 在其答案jq中相同的實際功能將值更改為破折號,但以另一種方式進行。null

我沒有列出要提取的id密鑰,而是刪除了我們不想使用的密鑰。然後我提取剩餘的值並用於map()將值更改null為破折號:

$ jq -r '[del(.id)[]] | map(.//"-") | @tsv' file
050111  1529730115000   192.168.66.230
050112  -       -

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