From: Felix Fietkau Date: Tue, 29 Oct 2013 13:59:47 +0000 (+0100) Subject: jshn: add json_get_values (useful for arrays) X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=commitdiff_plain;h=b5aa522f5dc00e9954b45a59a88a2f495feabd9e jshn: add json_get_values (useful for arrays) Signed-off-by: Felix Fietkau --- diff --git a/sh/jshn.sh b/sh/jshn.sh index 110892c..e919910 100644 --- a/sh/jshn.sh +++ b/sh/jshn.sh @@ -12,6 +12,15 @@ _json_set_var() { eval "${JSON_PREFIX}$___var=\"\$___val\"" } +__jshn_raw_append() { + local var="$1" + local value="$2" + local sep="${3:- }" + + eval "export -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" +} + + _jshn_append() { local __var="$1" local __value="$2" @@ -214,6 +223,22 @@ json_get_keys() { eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]" } +json_get_values() { + local _v_dest="$1" + local _v_keys _v_val + + unset "$_v_dest" + json_get_keys _v_keys "$2" + json_select "$2" + set -- $_v_keys + while [ "$#" -gt 0 ]; do + json_get_var _v_val "$1" + __jshn_raw_append "$_v_dest" "$_v_val" + shift + done + json_select .. +} + json_get_var() { local __dest="$1" local __cur