你如何在 jq 中分配 json 个对象?

How do you assign json objects in jq?

我试过了jq --argjson value '{"foo": "bar", "bar": "foo"}' ".x = $value" <<< "$json"

价值$json

{
   "x":{
      "foo": "hello"
   },
   "y":{
      "foo": "world"
   }
}

我得到的只有jq: 1 compile error

我预计:

{
   "x":{
      "foo": "bar",
      "bar": "foo"
   },
   "y":{
      "foo": "world"
   }
}

我试过在 $value 周围添加引号,但它抱怨 bash 引用问题,我相信它试图将整个 json 对象保存为字符串

美元在 shell 中的 double quoted string 中使用时必须进行转义。否则 shell 会解释它并将语句扩展为:

jq --argjson value '{"foo": "bar", "bar": "foo"}' ".x = " <<< "$json"
                     empty since not set in the shell  ^^^

我建议将 jq 命令用单引号引起来:

jq --argjson value '{"foo": "bar", "bar": "foo"}' '.x = $value' <<< "$json"