【问题标题】:How to update a element in array by index with jq?如何使用jq通过索引更新数组中的元素?
【发布时间】:2019-11-14 13:32:17
【问题描述】:

用这个例子:

[111, 222, 333, 444]

我想更改第三个元素(或其他来自 bash 变量的元素)。

【问题讨论】:

  • 这是一个 json 数组,因为我需要处理 jq

标签: jq


【解决方案1】:

您可以使用以下jq 命令:

jq --argjson index "$index" '.[$index] |= <new value>'

|= 是更新运算符,它可以让您在不更改路径的情况下更改左侧操作数上寻址的值,这样您就可以返回整个数组而不仅仅是更新后的值。

请注意,索引是从 0 开始的,因此要更改第三个元素,您需要将 bash 变量 $index 设置为 2。

需要使用--argjson 而不是通常的--arg 以避免将变量作为字符串处理,而是作为我们可以用作索引的数字。

你可以(有点)try it here

【讨论】:

  • 是的。我尝试使用 ``` echo "[111, 222, 333]" | jq'.[1] |= 555' ``` 它返回[ 111, 555, 333 ]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多