dba*_*ett 5 json nested updates jq
我想修改如下 JSON:
{
"foobar": {
"a": {
"adkjfe": {
"A": 1,
"foo": "bar"
}
},
"b": {
"ekjaei": {
"A": 2,
"bar": "foo"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果 A=1,则添加更多数据{"baz": ["bing", "bop"]}到 A 的父级。假设我不知道父键,同时保持 json 的其余部分不变。我尝试过很多不同的事情,包括:
.foobar | .. | .. | .[] | if select(.A==1) then . += {"baz": "bing"} else . end
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,并且只有我修改过的部分。
在这种情况下,我希望看到的结果是:
{
"foobar": {
"a": {
"adkjfe": {
"A": 1,
"foo": "bar",
"baz": ["bing", "bop"]
}
},
"b": {
"ekjaei": {
"A": 2,
"bar": "foo"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
仅选择类型object符合您的条件 ( A == 1) 的字段:
jq '(.foobar | .. | select(type == "object" and .A == 1)) |= .+ {"baz": ["bing", "bop"]}' test.json
Run Code Online (Sandbox Code Playgroud)
围绕()过滤器查询,请注意整个文档将与更新的字段一起返回,而不仅仅是您的子文档