diff options
author | Christian Hesse <mail@eworm.de> | 2023-10-10 12:08:17 +0200 |
---|---|---|
committer | Christian Hesse <mail@eworm.de> | 2023-10-16 11:51:04 +0200 |
commit | 080b3cbf9d8ff6cde9aeb08650ead5c3eeb9e7b7 (patch) | |
tree | d63edc46ef738c7957dd8e1fef9e11a8f446cca5 | |
parent | 8e9734347e365f9a801096664c27bf0f76d0bc4e (diff) |
global-functions: make $ParseJson global
-rw-r--r-- | global-functions.rsc | 29 | ||||
-rw-r--r-- | telegram-chat.rsc | 27 |
2 files changed, 30 insertions, 26 deletions
diff --git a/global-functions.rsc b/global-functions.rsc index 8c96c72..80f1f78 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -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; diff --git a/telegram-chat.rsc b/telegram-chat.rsc index 73fe6fe..6083fee 100644 --- a/telegram-chat.rsc +++ b/telegram-chat.rsc @@ -26,6 +26,7 @@ :global IfThenElse; :global LogPrintExit2; :global MkDir; +:global ParseJson; :global ScriptLock; :global SendTelegram2; :global SymbolForNotification; @@ -45,32 +46,6 @@ $WaitFullyConnected; $LogPrintExit2 warning $0 ("Downloading required certificate failed.") true; } -:local 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; -} - :local Data; :do { :set Data ([ /tool/fetch check-certificate=yes-without-crl output=user \ |