json 如何修改一个key的值?

v09wglhw  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(158)

使用jq如何改变一个键的值?我正在尝试根据键的长度更改键的值。但它似乎并不像预期的那样工作。

echo '[{"kiwi": 3 }, {"apple" : 4} ]' | jq 'map(with_entries(.key |= "\(.)", .value |= (. | length)))'

字符串
实际输出:

[
  {
    "kiwi": 3
  },
  {
    "apple": 4
  }
]


期望输出-

[
  {
    "kiwi": 4
  },
  {
    "apple": 5
  }
]

p1tboqfb

p1tboqfb1#

with_entries中,您只需要使用=将计算值(.key | length)分配给.value.key的值保持不变。

map(with_entries(.value = (.key | length)))

个字符
Demo

rqcrx0a6

rqcrx0a62#

你要的

map( with_entries( .value = ( .key | length ) ) )

字符串
解释如下。

.value |= ( . | length )


大致相当于

.value = ( .value | . | length )


所以你实际上是在做3 | length4 | length。当给定一个数字时,length产生该数字。所以它们分别产生34
你需要 key 的长度。

.value = ( .key | length )


同样地,

.key |= "\(.)"


可以看作是

.key = ( .key | "\(.)" )


因为键已经是字符串了

.key = .key


而这一点作用都没有。

相关问题