Modificar los valores de JSON en su lugar con JQ
#!/bin/bash
if [ $# -lt 3 ]; then
echo ""
echo "This script requires jq to be installed."
echo "It will add or modify the specified key and value in the JSON file."
echo "Three arguments required: (1) key, (2) value, (3) json file to modify,"
echo "and optionally a 4th argument s (for string) if the value is a string and should be wrapped in double quotes e.g."
echo ""
echo "===================================="
echo ""
echo "In the following examples, Modality is the key, test.json is the file"
echo ""
echo "To add/modify a number value, e.g.,"
echo "jadd Modality 3 test.json"
echo ""
echo "To add/modify a boolean, e.g., "
echo "jadd Modality true test.json"
echo ""
echo "To add/modify an array of numbers, wrap the array in single quotes, e.g.,:"
echo "jadd Modality '[1,3,5]' test.json"
echo ""
echo "To add/modify an array of strings, wrap the array in single quotes and put the strings in double quotes, e.g.,"
echo 'jadd Modality '['"a"','"b"','"c"']' test.json'
echo ""
echo "To add/modify a string, add the 4th argument, s:"
echo "jadd Modality MRI jq_test.json s"
echo ""
echo "======================="
exit 1
elif [ $# -eq 3 ]; then
key=$1
value=$2
file=$3
# Add number or boolean or array using --argjson
# echo "Three arguments key=$key; value=$value; file=$file"
# jq '."'"$key"'"= '$value'' $file > tmp.$$.json && mv tmp.$$.json $file
jq --argjson val "$value" '."'"$key"'"=$val' "${file}" > tmp.$$.json && mv tmp.$$.json $file
elif [ $# -eq 4 ]; then
key=$1
value=$2
file=$3
string=$4
# Add a string using --arg
# echo "Four arguments key=$key; value=$value; file=$file; string=$string"
# jq '."'"$key"'"= "'"$value"'"' $file > tmp.$$.json && mv tmp.$$.json $file
jq --arg val "$value" '."'"$key"'"=$val' "${file}" > tmp.$$.json && mv tmp.$$.json $file
fi
Troubled Tapir