考虑以下json:
{
a: {
b: {
c: 1,
d: 2
}
}
}
如何将b的所有属性移动到父级a:
之下{
a: {
c: 1,
d: 2,
b: {}
}
}
答案 0 :(得分:2)
对于这种特殊情况,你可以这样做:
$ jq '.a |= (.b = {}) + .b' input.json
此处,我们正在使用原始内容更新对象a
,其中b
替换为空对象,并将其与原始b
的内容相结合。
如果这太难以理解,这可能更容易理解:
$ jq '.a |=
with_entries(if .key == "b"
then (.value = {}), (.value | to_entries[])
else .
end)' input.json
答案 1 :(得分:1)
这只是@ Jeff-Mercado的第一个解决方案的变体,但可能稍微容易理解(特别是因为只有一个对.b的引用,并且因为RHS上的分组是明确的):
.a |= ({b:{}} + .b)
答案 2 :(得分:0)
为任何字段使用递归执行此操作:
walk
(
if (type == "object" and has("b")) then
.|=.b
else
.
end
)