Use a loop to handle the files one by one.
For instance, with while read:
find . -name '*.json' | while read fname; do
newname=$(jq -r '.billingAccountList[0]' "${fname}").json
mv "${fname}" "${newname}"
done
Using for might be possible, but it's more sensitive to spaces in the names of the files:
for fname in $(find . -name '*.json'); do
... (same as above) ...
Also note that you're moving the files into the current directory, as the original path is being stripped, so if you want to keep the directory structure:
find . -name '*.json' | while read fname; do
fdir=$(dirname "${fname}")
newname=$(jq -r '.billingAccountList[0]' "${fname}").json
mv "${fname}" "${fdir}/${newname}"
done
I hope this helps!
UPDATE: Using jq -r as suggested by @steeldriver. Thanks!