jshn: add json_get_values (useful for arrays)
authorFelix Fietkau <nbd@openwrt.org>
Tue, 29 Oct 2013 13:59:47 +0000 (14:59 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 29 Oct 2013 13:59:47 +0000 (14:59 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
sh/jshn.sh

index 110892cba29ba2d9ee60e7742851cf37040a685b..e91991001427b5e395f002a7afef2b0c6e853463 100644 (file)
@@ -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