Consider the following json:
{
a: {
b: {
c: 1,
d: 2
}
}
}
How can I move all the properties of b to be under the parent a:
{
a: {
c: 1,
d: 2,
b: {}
}
}
Consider the following json:
{
a: {
b: {
c: 1,
d: 2
}
}
}
How can I move all the properties of b to be under the parent a:
{
a: {
c: 1,
d: 2,
b: {}
}
}
For this particular case, you could do this:
$ jq '.a |= (.b = {}) + .b' input.json
Here we're updating object a
with the original contents with b
replaced with an empty object and combining it with the contents of the original b
.
If that was too hard to reason about, this might be easier to follow:
$ jq '.a |=
with_entries(if .key == "b"
then (.value = {}), (.value | to_entries[])
else .
end)' input.json
This is just a variant of @Jeff-Mercado's first solution, but may be slightly easier to follow (notably because there is only one reference to .b, and because the grouping on the RHS is explicit):
.a |= ({b:{}} + .b)
To do this recursively for any field use:
walk
(
if (type == "object" and has("b")) then
.|=.b
else
.
end
)