global-functions: make $ParseJson global

This commit is contained in:
Christian Hesse 2023-10-10 12:08:17 +02:00
parent 8e9734347e
commit 080b3cbf9d
2 changed files with 30 additions and 26 deletions

View file

@ -48,6 +48,7 @@
:global MkDir;
:global NotificationFunctions;
:global ParseDate;
:global ParseJson;
:global ParseKeyValueStore;
:global PrettyPrint;
:global RandomDelay;
@ -694,6 +695,34 @@
"day"=[ :tonum [ :pick $Date 8 10 ] ] });
}
# parse JSON into array
# Warning: This is not a complete parser!
:set ParseJson do={
:local Input [ :toarray $1 ];
:local Return ({});
:local Skip 0;
:for I from=0 to=([ :len $Input ] - 1) do={
:if ($Skip > 0 || $Input->$I = "\n" || $Input->$I = "\r\n") do={
:if ($Skip > 0) do={
:set $Skip ($Skip - 1);
}
} else={
:local Key ($Input->$I);
:if ($Input->($I + 1) = ":") do={
:set ($Return->$Key) ($Input->($I + 2));
:set Skip 2;
} else={
:set ($Return->$Key) [ :pick ($Input->($I + 1)) 1 [ :len ($Input->($I + 1)) ] ];
:set Skip 1;
}
}
}
:return $Return;
}
# parse key value store
:set ParseKeyValueStore do={
:local Source $1;