Copy value with jq
I use jq heavily in my day to day work. It's a powerful tool but not always easy, so I have piles of notes about how to do things with it.
I had to do a few iterations of copying a value from one JSON file to another the other day, and the files are large, and copying and pasting and launching editors was getting old, so I reached for jq. And after digging for a while and reading Stack Overflow answers interpreting the manual page for me, here's how to do it, in fish:
jq --argjson js (jq .path.field a.json) '.path.field = $js' b.json | sponge b.json
The subshell invoked by ()
reads the value from a.json
, --argjson
sets the value the variable js
without extra quotes or escapes, as it's already a valid JSON value, and then the assignment just sets the value to the document read from b.json
.
It also requires sponge because the jq developers don't want it to have an -i
option. Oh well.