jq - null値に対して「-」を印刷する

jq - null値に対して「-」を印刷する

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フィルタを使用すると、「-」に置き換えることができる「null」値のない出力が得られます。

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

そのようなヌル値に対して「-」を印刷する他の方法はありますか?

答え1

使用代替演算子://

だから:

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

答え2

これはEchoMike444と同じ実際の機能を使用してjq値をダッシュ​​に変更します。null彼らの答えしかし、別の方法で実行してください。

抽出するキーを一覧表示する代わりに、id使用したくないキーを削除しました。その後、残りの値を抽出し、map()ダッシュの値を次のように変更するために使用しました。null

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

使用ミラーmlr)はJSON入力を読み取り、nullのすべてのフィールドをに変更します-。次に、そのidフィールドを除いて残りをTSVに出力します。

$ mlr --ijson --otsv --headerless-csv-output put 'for (k,v in $*) { is_null(v) { $[k] = "-" } }' then  cut -x -f id file
050111  1529730115000   192.168.66.230
050112  -       -

関連情報