49 lines
1.3 KiB
Bash
49 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# sarav (hello@grity.com)
|
|
# convert key=value to json
|
|
# Created at Gritfy ( Devops Junction )
|
|
# Updated by: dr-dolomite to make it more robust since it was failing on some casess
|
|
|
|
file_name="$1"
|
|
|
|
echo "{"
|
|
last_line=$(wc -l < "$file_name")
|
|
first_line=true
|
|
|
|
while IFS='=' read -r key value || [[ -n "$key" ]]; do
|
|
# Skip empty lines and comments
|
|
if [[ -z "$key" || "$key" == \#* ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Trim leading and trailing whitespace from key and value
|
|
key=$(echo "$key" | awk '{$1=$1};1')
|
|
value=$(echo "$value" | awk '{$1=$1};1')
|
|
|
|
# Check if value includes double quotes inside it like: "value,"value"". If there is, remove the inner double quotes.
|
|
if [[ "$value" == *\"* ]]; then
|
|
value=$(echo "$value" | sed 's/\"//g')
|
|
# enclose the value in double quotes again
|
|
value="\"$value\""
|
|
fi
|
|
|
|
# Check if value is empty, if so, skip printing this key-value pair
|
|
if [[ -z "$value" ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Print comma before each pair except for the first one
|
|
if $first_line; then
|
|
first_line=false
|
|
else
|
|
printf ','
|
|
fi
|
|
|
|
# Print key-value pair in JSON format without surrounding double quotes on value
|
|
printf ' "%s" : %s' "$key" "$value"
|
|
|
|
printf '\n'
|
|
done < "$file_name"
|
|
|
|
echo "}"
|