jq - 断言恰好返回 1 个元素

jq - 断言恰好返回 1 个元素

我使用以下 jq 片段从值数组中提取键:

jq '[.[].refreshToken | select(. != null)] | unique]'

我如何断言只返回了 1 个元素?如果在结果数组中找到超过 1 个元素,我希望返回非 0 状态代码/否则结果 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将为零;否则,它将非零。

评论显示,我们所寻求的是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'

相关内容