我想修改json中所有x
键的值,如下所示:
{
"a": {
"b": {
"c": [
{
"0": {
"x": 23,
"name": "AS"
}
},
{
"1": {
"x": 23,
"name": "AS"
}
},
{
"2": {
"x": 23,
"name": "Fe"
}
},
{
"3": {
"x": 23,
"name": "Pl"
}
}
]
}
}
}
我尝试了多种方法,但是我无法修改x
的值并因此无法获得完整的json。我要做的就是修改x
的值并获得最后一个数组。
这是我最近一次达到结果的地方:https://jqplay.org/s/Wx741btZOg
答案 0 :(得分:1)
要将所有x
的值更改为97
,可以尝试以下jq命令:
<file jq '.a.b.c as $in | .a.b.c=[ $in[] | .[].x=97 ]'
该命令将对象的父级存储在变量$in
中,以便您可以修改其子元素之一。
答案 1 :(得分:1)
使用|=
只需编写以下内容即可执行更新:
.a.b.c |= [.[]|.[].x=97]
或者也许更清楚:
.a.b.c |= map(.[].x=97)
如果您确实想“修改所有x键的值”,则可以使用walk
:
walk(if type == "object" and has("x") then .x=97 else . end)
(如果您的jq没有walk
,那么您可以从网络上(例如,从stackblitz demo - template from中获取其定义)