mirror of https://github.com/lework/script
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.7 KiB
48 lines
1.7 KiB
5 years ago
|
#--- json_escape_string() - Format a string value according to JSON syntax (no unicode for now) ---
|
||
|
function json_escape_string() {
|
||
|
sed -E '$!N; s/(["\\\/])/\\\1/g; s/\'$'\b''/\\b/g; s/\n/\\n/g; s/\'$'\t''/\\t/g; s/\'$'\f''/\\f/g; s/\'$'\r''/\\r/g' <<<"$*" | tr -d '\n'
|
||
|
}
|
||
|
|
||
|
#--- json_unescape_string() - Convert a JSON string (without quotes) to native bash format ---
|
||
|
function json_unescape_string() {
|
||
|
sed -E 's/\\"/"/g; s#\\/#/#g; s/\\b/'$'\b''/; s/\\n/\'$'\n''/g; s/\\t/\'$'\t''/g; s/\\f/\'$'\f''/g; s/\\r/\'$'\r''/g; s/\\\\/\\/g' <<<"$*"
|
||
|
}
|
||
|
|
||
|
#--- json_array() - Format a JSON array ---
|
||
|
function json_array() {
|
||
|
local sep=''
|
||
|
echo -n "["
|
||
|
#--- Print each argument as a JSON element ---
|
||
|
for value in "$@"; do
|
||
|
#--- Quote value ---
|
||
|
echo -n "$sep\"`json_escape_string "$value"`\""
|
||
|
#--- Add a seperator for subsequent elements ---
|
||
|
sep=', '
|
||
|
done
|
||
|
#--- Close JSON reponse ---
|
||
|
echo "]"
|
||
|
}
|
||
|
|
||
|
#--- json_dict() - Format a JSON dictionary ---
|
||
|
function json_dict() {
|
||
|
local var
|
||
|
local sep=''
|
||
|
echo -n "{"
|
||
|
#--- Print each argument as a JSON element ---
|
||
|
for var in "$@"; do
|
||
|
#--- var=value : String value supplied inline, escape string for JSON ---
|
||
|
if [[ "$var" =~ ^([^=]*)=(.*)$ ]]; then
|
||
|
echo -n "$sep\"${BASH_REMATCH[1]}\": \"`json_escape_string "${BASH_REMATCH[2]}"`\""
|
||
|
#--- var:value : Raw JSON value supplied inline, don't escape ---
|
||
|
elif [[ "$var" =~ ^([^:]*):(.*)$ ]]; then
|
||
|
echo -n "$sep\"${BASH_REMATCH[1]}\": ${BASH_REMATCH[2]}"
|
||
|
#--- var : String value is to be obtained from bash environment variables ---
|
||
|
else
|
||
|
echo -n "$sep\"$var\": \"`json_escape_string "${!var}"`\""
|
||
|
fi
|
||
|
#--- Add a seperator for subsequent elements ---
|
||
|
sep=', '
|
||
|
done
|
||
|
#--- Close JSON reponse ---
|
||
|
echo "}"
|
||
|
}
|