- _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
+
+ if [ -n "$2" ]; then
+ json_get_var _tbl_cur "$2"
+ else
+ _json_get_var _tbl_cur JSON_CUR
+ fi
+ local __var="${JSON_PREFIX}KEYS_${_tbl_cur}"
+ eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
+}
+
+json_get_values() {
+ local _v_dest="$1"
+ local _v_keys _v_val _select=
+ local _json_no_warning=1
+
+ unset "$_v_dest"
+ [ -n "$2" ] && {
+ json_select "$2" || return 1
+ _select=1
+ }
+
+ json_get_keys _v_keys
+ set -- $_v_keys
+ while [ "$#" -gt 0 ]; do
+ json_get_var _v_val "$1"
+ __jshn_raw_append "$_v_dest" "$_v_val"
+ shift
+ done
+ [ -n "$_select" ] && json_select ..
+
+ return 0