Here's a solution requiring only one jq call:
jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json | while read -r key ; do read -r item printf "%s\n" "$item" > "/tmp/$key.json" done
It might be faster to execute jq command output on awk, for example:
jq -cr 'keys[] as $k | "\($k)\t\(.[$k])"' input.json | awk -F\\t '{ print $2 > "/tmp/" $1 ".json" }'
Of course, these approaches should be changed if key names contain characters that cannot be used in file names.
source share