update to run on nested object too

This commit is contained in:
Abhinav 2023-04-01 13:04:56 +05:30
parent 796d94f1c6
commit 0801b8e941

View file

@ -11,18 +11,39 @@ then
exit
fi
# Get the keys from the JSON file
# Recursive function to check for keys in nested JSON objects
check_keys() {
local keys="$1"
local parent_key="$2"
for key in $keys
do
local full_key=""
if [[ -z $parent_key ]]; then
full_key="$key"
else
full_key="$parent_key.$key"
fi
local children_keys=$(jq -r --arg key "$key" 'select(.[$key] | type == "object") | .[$key] | keys[]' "$json_file_path")
if [ -n "$children_keys" ]; then
# check first if the key is not in the ignore list
check_keys "$children_keys" "$full_key"
else
if ! grep -rqE "'$full_key'|\"$full_key\"" "$folder_path"; then
# Remove the key from the JSON file
# echo the command to remove the key from the JSON file
jq "del(.$(echo $full_key | sed 's/\./"."/g' | sed 's/^/"/' | sed 's/$/"/'))" "$json_file_path" > "$json_file_path.tmp" && mv "$json_file_path.tmp" "$json_file_path"
echo "Removing key \"$full_key\" from the JSON file"
else
echo "Key \"$full_key\" is being used."
fi
fi
done
}
# Get the top-level keys from the JSON file
keys=$(jq -r 'keys[]' "$json_file_path")
# Loop through the keys
for key in $keys
do
# Check if the key is present in any of the files in the folder
grep -rqE "'$key'|\"$key\"" "$folder_path"
if [ $? -ne 0 ]
then
echo "$key is not present as a string in any of the files in the folder"
# Remove the key from the JSON file
jq "del(.\"$key\")" "$json_file_path" > "$json_file_path.tmp" && mv "$json_file_path.tmp" "$json_file_path"
fi
done
# Loop through the keys and recursively check for nested keys
check_keys "$keys" ""
echo "Done checking for missing keys."