[PATCH 1/1] jshn.sh: Add getters for the cursor and its parent

Philip Prindeville philipp at redfish-solutions.com
Sun Aug 3 13:33:57 PDT 2025


From: Philip Prindeville <philipp at redfish-solutions.com>

Signed-off-by: Philip Prindeville <philipp at redfish-solutions.com>
---
 sh/jshn.sh | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/sh/jshn.sh b/sh/jshn.sh
index 1d3055711820e5a21ea59cae49e7bf3f56b626d8..5599c85835d0c81c8d47a9dfd73f32e4db2a7c9b 100644
--- a/sh/jshn.sh
+++ b/sh/jshn.sh
@@ -197,6 +197,42 @@ json_add_fields() {
 	done
 }
 
+json_get_position() {
+	local __dest="$1"
+	eval "export -- \"$__dest=\${JSON_CUR}\"; [ -n \"\${JSON_CUR+x}\" ]"
+}
+
+json_move_to() {
+	local cur="$1"
+	_json_set_var JSON_CUR "$cur"
+}
+
+json_get_parent_position() {
+	local __dest="$1" cur parent
+	_json_get_var cur JSON_CUR
+	parent="U_$cur"
+	eval "export -- \"$__dest=\${$parent}\"; [ -n \"\${$parent+x}\" ]"
+}
+
+json_get_root_position() {
+	local __dest="$1" cur="J_V"
+	eval "export -- \"$__dest=\${cur}\"; [ -n \"\${cur+x}\" ]"
+}
+
+json_get_index() {
+	local __dest="$1"
+	local cur parent seq
+	_json_get_var cur JSON_CUR
+	_json_get_var parent "U_$cur"
+	if [ "${parent%%[0-9]*}" != "J_A" ]; then
+		[ -n "$_json_no_warning" ] || \
+			echo "WARNING: Not inside an array" >&2
+		return 1
+	fi
+	seq="S_$parent"
+	eval "export -- \"$__dest=\${$seq}\"; [ -n \"\${$seq+x}\" ]"
+}
+
 # functions read access to json variables
 
 json_compact() {
-- 
2.43.0




More information about the openwrt-devel mailing list