diff --git a/fhem/fhem.pl b/fhem/fhem.pl index cd3f63b96..5b800977e 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -134,6 +134,7 @@ sub redirectStdinStdErr(); sub rejectDuplicate($$$); sub setGlobalAttrBeforeFork($); sub setReadingsVal($$$$); +sub toJSON($); sub utf8ToLatin1($); sub CommandAttr($$); @@ -4603,6 +4604,34 @@ sub escapeLogLine($) { return $s; } +sub +toJSON($) +{ + my $val = shift; + + if(not defined $val) { + return "null"; + + } elsif (not ref $val) { + $val =~ s/([\x00-\x1f\x22\x5c\x7f])/sprintf '\u%04x', ord($1)/ge; + + return '"' . $val . '"'; + + } elsif (ref $val eq 'ARRAY') { + return '[' . join(',', map toJSON($_), @$val) . ']'; + + } elsif (ref $val eq 'HASH') { + return '{' . join(',', + map { toJSON($_).":".toJSON($val->{$_}) } + sort keys %$val) . '}'; + + } else { + return toJSON("toJSON: Cannot encode $val"); + + } +} + + sub Debug($) { my $msg= shift; @@ -5056,4 +5085,5 @@ getPawList($) return @dob; } + 1;