使用 JQ --arg 传递 NULL 参数

Pass NULL argument with JQ --arg

我想要的最终状态是这样的 JSON 文件:

{
   "xxx": null
}

但是命令 jq --null-input --arg tst null '.xxx=$tst' 产生:

{
  "xxx": "null"
}

jq --null-input --arg tst "" '.xxx=$tst' 产生:

{
  "xxx": ""
}

如何传递一个变成值 null 而不是字符串 "null" 的值?

使用 --argjson,而不是 --arg

$ jq --null-input --argjson tst null '.xxx=$tst'
{
  "xxx": null
}

--arg 始终将分配的值视为字符串,而 --argjson 将其视为 JSON 值。

其他三种简单的可能性,最短的在前:

jq -n '{xxx: .}'
echo null | jq  '{xxx: .}'
jq -n --argjson xxx null  '{$xxx}'