jq delete 函数不适用于变量

jq delete function doesn't work with variable

我正在尝试将变量传递给 jq delete 函数。它不适用于变量,但如果硬编码则可以。谁能帮我理解我做错了什么。

无效:

echo '{"profiles": {"a":"1", "b":"2"}}' | jq --arg a '.a' '.profiles | del($a)'

作品:

echo '{"profiles": {"a":"1", "b":"2"}}' | jq '.profiles | del(.a)'

您只能将原始字符串(使用 --arg 选项)或 JSON-encoded 字符串(使用 --argjson 选项)作为参数传递。您不能将 jq 代码作为变量传递(并在 jq 中对其求值)。

但是,您可以通过字符串表示来引用字段。因此,只需使用字段名称作为参数,并使用 .[$var] 来解决它:

echo '{"profiles": {"a":"1", "b":"2"}}' | jq --arg a 'a' '.profiles | del(.[$a])'
{
  "b": "2"
}