The json_array() and json_object() functions currently can only be used
to construct arrays and objects containing strings and integers.
This commit modifies the functions so that they can also encode objects
and arrays within objects and arrays.
local name
local value
+ local re_number
+ local re_object
+ local re_array
+
+ re_number='^[0-9]+$'
+ re_object='^{.*}$'
+ re_array='^\[.*\]$'
+
name="${!i}"
((i++))
value="${!i}"
printf ', '
fi
- if [[ "$value" =~ ^[0-9]+$ ]]; then
+ if [[ "$value" =~ $re_number ]]; then
printf '"%s": %d' "$name" "$value"
+
+ elif [[ "$value" =~ $re_object ]] ||
+ [[ "$value" =~ $re_array ]]; then
+ printf '"%s": %s' "$name" "$value"
+
else
printf '"%s": "%s"' "$name" "$value"
fi
local arg
local n
+ local re_number
+ local re_object
+ local re_array
+
+ re_number='^[0-9]+$'
+ re_object='^{.*}$'
+ re_array='^\[.*\]$'
+
printf "["
n=0
printf ", "
fi
- if [[ "$arg" =~ ^[0-9]+$ ]]; then
+ if [[ "$arg" =~ $re_number ]]; then
printf '%d' "$arg"
+
+ elif [[ "$arg" =~ $re_object ]] ||
+ [[ "$arg" =~ $re_array ]]; then
+ printf '%s' "$arg"
+
else
printf '"%s"' "$arg"
fi