【问题标题】:Set multiple values设置多个值
【发布时间】:2015-06-01 02:48:25
【问题描述】:

鉴于此文件

{
  "[global]": {
    "current": "",
    "hash": ""
  }
}

我想要这个输出:

{
  "[global]": {
    "current": "alpha",
    "hash": "bravo"
  }
}

我有这个工作命令:

jq '."[global]".current="alpha" | ."[global]".hash="bravo"' example.json

但是,我宁愿不必重复 ."[global]" 部分。我试过这个 命令,但它只返回部分输入:

$ jq '."[global]" | .current="alpha" | .hash="bravo"' example.json
{
  "current": "alpha",
  "hash": "bravo"
}

【问题讨论】:

    标签: json jq


    【解决方案1】:

    对象的multiplication 递归地合并两者。您可以将[global] 对象与具有新值的对象合并。结果中将使用 RHS 上的字符串值。

    ."[global]" *= { current: "alpha", hash: "bravo" }
    

    加法也可以在这里工作,但乘法通常更有用,尤其是嵌套对象。它们不是替换相应的对象,而是合并。

    【讨论】:

    • 嗯,这太完美了。但是现在看它实际上更容易从头开始构建修改后的对象
    【解决方案2】:

    正如Jeff 所指出的,非递归+= 运算符也可以在这种情况下工作。具体来说:

      ."[global]" += {current: "alpha", hash:"bravo"}
    

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多