[LEDE-DEV] [PATCH libubox] sh/jshn.sh: add json_for_each_item()
Hans Dedecker
dedeckeh at gmail.com
Mon Feb 5 00:57:49 PST 2018
Function usefull to iterate through the different elements of an
array or object; the provided callback function is called for each
value.
For field types different from array or object the callback is called
with the retrieved value.
Signed-off-by: Hans Dedecker <dedeckeh at gmail.com>
---
sh/jshn.sh | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/sh/jshn.sh b/sh/jshn.sh
index bf76edb..aa2e868 100644
--- a/sh/jshn.sh
+++ b/sh/jshn.sh
@@ -278,3 +278,30 @@ json_is_a() {
json_get_type type "$1"
[ "$type" = "$2" ]
}
+
+json_for_each_item() {
+ [ "$#" -ge 2 ] || return 0
+ local function="$1"; shift
+ local target="$1"; shift
+ local type
+ local val
+
+ json_get_type type "$target"
+ case "$type" in
+ object|array)
+ local keys
+ local key
+ json_select "$target"
+ json_get_keys keys
+ for key in $keys; do
+ json_get_var val "$key"
+ eval "$function \"\$val\" \"\$@\""
+ done
+ json_select ..
+ ;;
+ *)
+ json_get_var val "$target"
+ eval "$function \"\$val\" \"\$@\""
+ ;;
+ esac
+}
--
2.15.1
More information about the Lede-dev
mailing list