There are plenty of examples of updating a value in a nested entry in jq, but I think I have a unique question, because the value I want to provide is already in another part of the same entry.
Given the following input:
{"items": [ {"name": "first" }, {"name": "second" } ]}
I want to produce this output:
{"items": [ {"name": "first","value": "first" }, {"name": "second","value": "second" } ]}
In other words, I want to copy the value of .name
to the value of .value
for each entry in items[]
.
Assignment is easy enough if the value is static. jq '.items[].value |= "x"
But since the value is dynamic, I always get stuck either at the wrong context level:
$ jq '.items[].value|=.name'<<< '{"items":[{"name": "first"},{"name": "second"}]}'{"items": [ {"name": "first","value": null }, {"name": "second","value": null } ]}
Or with the wrong output context:
jq '.items[]|(.value=.name)'<<< '{"items":[{"name": "first"},{"name": "second"}]}'{"name": "first","value": "first"}{"name": "second","value": "second"}
How can I make the change within the entries, for each entry, but still output the whole thing from the top level?