I want to set bundleDependencies
by using jq
:
json_string="$(cat <<'END'
{
"name": "hello",
"dependencies": {
"progress": "^2.0.0",
"tar": "^6.2.1"
},
"devDependencies": {
"node-fetch": "~2.6.1",
"yargs": "^16.2.0"
}
}
END
)"
Now add dependencies
to the bundleDependencies
:
# json_string="$(jq -r ".bundleDependencies += (.dependencies | keys)" <<< "$json_string")"
Now add devDependencies
to the bundleDependencies
:
# json_string="$(jq -r ".bundleDependencies += (.devDependencies | keys)" <<< "$json_string")"
Finally, add devDependencies
again for testing if jq
can ignore the duplicated items:
# jq -r ".bundleDependencies += (.devDependencies | keys)" <<< "$json_string"
{
"name": "hello",
"dependencies": {
"progress": "^2.0.0",
"tar": "^6.2.1"
},
"devDependencies": {
"node-fetch": "~2.6.1",
"yargs": "^16.2.0"
},
"bundleDependencies": [
"progress",
"tar",
"node-fetch",
"yargs",
"node-fetch",
"yargs"
]
}
How to make jq
ignore the duplicated items when it already existed in the array?
jq '.bundleDependencies |= unique'
Documented here.
It also looks like you can do everything at once, without the need for unique
:
jq ".bundleDependencies += (.dependencies + .devDependencies | keys)"
If bundleDependencies
is already populated, you can use this:
jq ".bundleDependencies = ((.dependencies + .devDependencies | keys) + .bundleDependencies | unique)"