-json_add_table() {
- local TYPE="$1"
- JSON_SEQ=$(($JSON_SEQ + 1))
- jshn_append JSON_STACK "$JSON_CUR"
- local table="JSON_$TYPE$JSON_SEQ"
- export -- "UP_$table=$JSON_CUR"
- export -- "KEYS_$table="
- jshn_append JSON_UNSET "KEYS_$table UP_$table"
- [ "$TYPE" = "ARRAY" ] && jshn_append JSON_UNSET "SEQ_$table"
- JSON_CUR="$table"
+_json_close_table() {
+ local _s_cur _s_new
+
+ _json_get_var _s_cur JSON_CUR
+ _json_get_var _s_new "UP_$_s_cur"
+ _json_set_var JSON_CUR "$_s_new"
+}
+
+json_set_namespace() {
+ local _new="$1"
+ local _old="$2"
+
+ [ -n "$_old" ] && _set_var "$_old" "$JSON_PREFIX"
+ JSON_PREFIX="$_new"
+}
+
+json_cleanup() {
+ local unset
+
+ _json_get_var unset JSON_UNSET
+ for tmp in $unset JSON_VAR; do
+ unset \
+ ${JSON_PREFIX}UP_$tmp \
+ ${JSON_PREFIX}KEYS_$tmp \
+ ${JSON_PREFIX}SEQ_$tmp \
+ ${JSON_PREFIX}TYPE_$tmp \
+ ${JSON_PREFIX}NAME_$tmp \
+ ${JSON_PREFIX}$tmp
+ done
+
+ unset \
+ ${JSON_PREFIX}JSON_SEQ \
+ ${JSON_PREFIX}JSON_CUR \
+ ${JSON_PREFIX}JSON_UNSET
+}
+
+json_init() {
+ json_cleanup
+ export -- \
+ ${JSON_PREFIX}JSON_SEQ=0 \
+ ${JSON_PREFIX}JSON_CUR="JSON_VAR" \
+ ${JSON_PREFIX}KEYS_JSON_VAR= \
+ ${JSON_PREFIX}TYPE_JSON_VAR=