【问题标题】:JQ How to add a node to a complete treeJQ 如何将节点添加到完整的树中
【发布时间】:2018-07-17 10:50:57
【问题描述】:

向树中添加字段很简单:

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"
  }
}

谁能告诉我我的方法的错误?

【问题讨论】:

    标签: arrays json variables iteration jq


    【解决方案1】:

    如果您的意图只是将元素附加到对象,最好使用+= as

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

    在行动中,

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

    【讨论】:

    • 谢谢!完美运行。
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多