I have a input json file with an array. I need to updated two values (ver & date) in each array element. I could come up with below script but need help. I have hardcoded the ver & date to simplify the script.
input.json
[
{
"svcname": "svc1",
"repo": "https://repo.mycom.org/repocontext/svc1-list",
"ver": "0.1",
"date": "2019-11-05"
},
{
"svcname": "svc1",
"repo": "https://repo.mycom.org/repocontext/svc1-list",
"ver": "0.1",
"date": "2019-12-21"
}
]
Script:
#!/bin/bash
set +x
injson=input.json
updatedjson=$(jq .[] ${injson})
services=$(cat ${injson} | jq '.[] | .svcname' | tr -d \")
i=1
for svc in $services; do
echo "==>$svc"
echo "======> input json=${updatedjson}"
echo "======> update ver=${i}"
updatedjson=$(echo ${updatedjson} | jq ". | select( .name ==\"$svc\").ver=\"$i\"" | jq . )
svcdate="2020-01-$i"
echo "======> update date=$svcdate"
updatedjson=$(echo ${updatedjson} | jq ". | select( .name ==\"$svc\").date=\"$svcdate\"" | jq . )
echo "============================================"
echo
i=`expr $i + 1`
done
echo "======= write to file ====="
echo ${updatedjson}
echo ${updatedjson} | jq . > outjson.json