将值复制到同一元素中的另一个条目

问题描述 投票:0回答:1

有很多更新 jq 中嵌套条目中的值的示例,但我认为我有一个独特的问题,因为我想要提供的值已经在同一条目的另一部分中。

给出以下输入:

{
  "items": [
    {
      "name": "first"
    },
    {
      "name": "second"
    }
  ]
}

我想产生这个输出:

{
  "items": [
    {
      "name": "first",
      "value": "first"
    },
    {
      "name": "second",
      "value": "second"
    }
  ]
}

换句话说,我想将

.name
中每个条目的
.value
的值复制到
items[]
的值。

如果值是静态的,则赋值很容易。

jq '.items[].value |= "x"

但是由于该值是动态的,我总是陷入错误的上下文级别:

$ jq '.items[].value|=.name' <<< '{"items":[{"name": "first"},{"name": "second"}]}'
{
  "items": [
    {
      "name": "first",
      "value": null
    },
    {
      "name": "second",
      "value": null
    }
  ]
}

或者输出上下文错误:

jq '.items[]|(.value=.name)' <<< '{"items":[{"name": "first"},{"name": "second"}]}'
{
  "name": "first",
  "value": "first"
}
{
  "name": "second",
  "value": "second"
}

如何在条目内对每个条目进行更改,但仍从顶层输出整个内容?

json jq
1个回答
0
投票

我想将

.name
中每个条目的
.value
值复制到
items[]
的值。

您必须使用 更新赋值运算符

|=

.items[] |= (.value = .name)
{
  "items": [
    {
      "name": "first",
      "value": "first"
    },
    {
      "name": "second",
      "value": "second"
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.