JQ如何将节点添加到完整的树中

时间:2018-07-17 10:50:58

标签: arrays json variables iteration jq

将字段添加到树很简单:

echo '{ "a": "b" }' | jq '.'
{
  "a": "b"
}
echo '{ "a": "b" }' | jq '. + { c: "d" }'
{
  "a": "b",
  "c": "d"
}

但是通过仅显示修改后的子树,无法将字段添加到现有对象中的工作按预期进行:

echo '{ "e": { "f": "g" } }' | jq '.' 
{
  "e": {
    "f": "g"
  }
}
echo '{ "e": { "f": "g" } }' | jq '.e + { h: "i" }' 
{
  "f": "g",
  "h": "i"
}

尝试了各种解决方法,但没有给出所需的解决方法:

echo '{ "e": { "f": "g" } }' | jq '. as $k | .e + { h: "i" } | $k + .'
{
  "e": {
    "f": "g"
  },
  "f": "g",
  "h": "i"
}

echo '{ "e": { "f": "g" } }' | jq '. as $k | .e + { h: "i" } | $k + .e'
{
  "e": {
    "f": "g"
  }
}

所需的输出:

{
  "e": {
    "f": "g",
    "h": "i"
  }
}

有人可以告诉我我的方式的错误吗?

1 个答案:

答案 0 :(得分:3)

如果您只是想将元素添加到对象,最好使用+=作为

jq '.e += { "h" : "i" }'

实际上,

echo '{ "e": { "f": "g" } }' | jq '.e += { "h" : "i" }'
{
  "e": {
    "f": "g",
    "h": "i"
  }
}