次のjqスニペットを使用して、値の配列からキーを抽出します。
jq '[.[].refreshToken | select(. != null)] | unique]'
1つの要素だけが返されたとどのように主張しますか?結果の配列に2つ以上の要素がある場合は、ゼロ以外のステータスコードが返されます。それ以外の場合、結果のJSON配列に1つの要素が含まれます。
[{
"tokenType":"Bearer",
"expiresIn":3599,
"expiresOn":"2021-09-28 17:41:15.929902",
"resource":"https://management.core.windows.net/",
"accessToken":"lkZXIuZ2mn_A",
"refreshToken":"0.AYIAGNEIQ9HtAEOq4v1k",
"oid":"0000-ea77-4abe-961b-0000",
"userId":"[email protected]",
"isMRRT":true,
"_clientId":"0000-0000-0000-0000",
"_authority":"https://login.microsoftonline.com/common"
}]
答え1
jq
対応する(または)コマンドラインオプションを使用すると、最後に評価された値に対応する終了状態でユーティリティを終了させることができます。--exit-status
-e
jq -r -e '[.[] | select(.refreshToken != null)] | unique | if length == 1 then .[].refreshToken else empty end' file
上記の式で評価された最後のステートメントがtrueで空でなく、nullでない場合、終了ステータスはjq
0になります。それ以外の場合はゼロではありません。
コメントは、私たちが探しているものがrefreshToken
データであることを示します。ただし、それが固有の場合にのみ該当します。あなたはこれを行うことができます
jq -r -e '[.[].refreshToken // empty] | unique | if length == 1 then .[] else empty end' file
答え2
解決済み:jq -r '([.[].refreshToken | select(. != null)] | unique) as $r | if $r | length == 1 then $r | .[] else null end'