_json_inc() {
local _var="$1"
local _dest="$2"
- local seq
+ local _seq
- _json_get_var seq "$_var"
- seq="$((${seq:-0} + 1))"
- _json_set_var "$_var" "$seq"
- [ -n "$dest" ] && _set_var "$_dest" "$seq"
+ _json_get_var _seq "$_var"
+ _seq="$((${_seq:-0} + 1))"
+ _json_set_var "$_var" "$_seq"
+ [ -n "$_dest" ] && _set_var "$_dest" "$_seq"
}
_json_stack_push() {
local type="$2"
local itype="$3"
local cur new_cur
+ local seq
_json_get_var cur JSON_CUR
_json_inc JSON_SEQ seq
local table="JSON_$itype$seq"
_json_export "UP_$table" "$cur"
_json_export "KEYS_$table" ""
- [ "$TYPE" = "ARRAY" ] && _json_export "KEYS_$table" ""
+ [ "$itype" = "ARRAY" ] && _json_export "SEQ_$table" ""
_json_stack_push "$table"
_json_get_var new_cur JSON_CUR
- _json_add_generic object "$1" "$new_cur" "$cur"
+ _json_add_generic "$type" "$1" "$new_cur" "$cur"
}
_json_close_table() {
_json_add_generic boolean "$1" "$2"
}
+json_add_double() {
+ _json_add_generic double "$1" "$2"
+}
+
# functions read access to json variables
json_load() {
}
json_get_type() {
- local dest="$1"
- local cur
+ local __dest="$1"
+ local __cur
- _json_get_var cur JSON_CUR
- local var="${JSON_PREFIX}TYPE_${cur}_$2"
- eval "export -- \"$dest=\${$var}\"; [ -n \"\${$var+x}\" ]"
+ _json_get_var __cur JSON_CUR
+ local __var="${JSON_PREFIX}TYPE_${__cur}_${2//[^a-zA-Z0-9_]/_}"
+ eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
+}
+
+json_get_keys() {
+ local __dest="$1"
+ local _tbl_cur
+
+ json_get_var _tbl_cur "$2"
+ local __var="${JSON_PREFIX}KEYS_${_tbl_cur}"
+ eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
}
json_get_var() {
;;
esac
}
+
+json_is_a() {
+ local type
+
+ json_get_type type "$1"
+ [ "$type" = "$2" ]
+}