|
@@ -288,3 +288,28 @@ 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 val
|
|
|
+
|
|
|
+ json_get_type type "$target"
|
|
|
+ case "$type" in
|
|
|
+ object|array)
|
|
|
+ local keys key
|
|
|
+ json_select "$target"
|
|
|
+ json_get_keys keys
|
|
|
+ for key in $keys; do
|
|
|
+ json_get_var val "$key"
|
|
|
+ eval "$function \"\$val\" \"\$key\" \"\$@\""
|
|
|
+ done
|
|
|
+ json_select ..
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ json_get_var val "$target"
|
|
|
+ eval "$function \"\$val\" \"\" \"\$@\""
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+}
|