mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 08:11:44 +00:00
fhem.pl: enable json2nameValue to parse arrays on the top level (Forum #108786)
git-svn-id: https://svn.fhem.de/fhem/trunk@21297 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
7c207fe6a5
commit
320de372dc
@ -219,7 +219,7 @@ MQTT2_DEVICE_Parse($$)
|
||||
my $cidArr = $modules{MQTT2_DEVICE}{defptr}{cid}{$newCid};
|
||||
return if(!$cidArr);
|
||||
my $add;
|
||||
if(length($value) < 10000 && $value =~ m/^\s*{.*}\s*$/s) {
|
||||
if(length($value) < 10000 && $value =~ m/^\s*[{[].*[}\]]\s*$/s) {
|
||||
my $ret = json2nameValue($value);
|
||||
if(keys %{$ret}) {
|
||||
$topic =~ m,.*/([^/]+),;
|
||||
|
42
fhem/fhem.pl
42
fhem/fhem.pl
@ -5163,9 +5163,9 @@ json2nameValue($;$$)
|
||||
|
||||
sub eObj($$$$$$);
|
||||
sub
|
||||
eObj($$$$$$)
|
||||
eObj($$$$$$$)
|
||||
{
|
||||
my ($ret,$map,$name,$val,$in,$prefix) = @_;
|
||||
my ($ret,$map,$name,$val,$in,$prefix,$firstLevel) = @_;
|
||||
my $err;
|
||||
|
||||
if($val =~ m/^"/) {
|
||||
@ -5177,9 +5177,18 @@ json2nameValue($;$$)
|
||||
} elsif($val =~ m/^{/) { # }
|
||||
($err, $val, $in) = lObj($val, '{', '}');
|
||||
return ($err,undef) if($err);
|
||||
my $r2 = json2nameValue($val);
|
||||
foreach my $k (keys %{$r2}) {
|
||||
setVal($ret, $map, $prefix, "${name}_$k", $r2->{$k});
|
||||
|
||||
my %r2;
|
||||
my $in2 = $val;
|
||||
while($in2 =~ m/^\s*"([^"]+)"\s*:\s*(.*)$/s) {
|
||||
my ($name,$val) = ($1,$2);
|
||||
$name =~ s/[^a-z0-9._\-\/]/_/gsi;
|
||||
($err,$in2) = eObj(\%r2, $map, $name, $val, $in2, $prefix);
|
||||
return ($err,undef) if($err);
|
||||
$in2 =~ s/^\s*,\s*//;
|
||||
}
|
||||
foreach my $k (keys %r2) {
|
||||
setVal($ret, $map, $prefix, $firstLevel ? $k : "${name}_$k", $r2{$k});
|
||||
}
|
||||
|
||||
} elsif($val =~ m/^\[/) {
|
||||
@ -5188,7 +5197,8 @@ json2nameValue($;$$)
|
||||
my $idx = 1;
|
||||
$val =~ s/^\s*//;
|
||||
while($val) {
|
||||
($err,$val) = eObj($ret, $map, $name."_$idx", $val, $val, $prefix);
|
||||
($err,$val) = eObj($ret, $map, $firstLevel ? $idx : $name."_$idx",
|
||||
$val, $val, $prefix);
|
||||
return ($err,undef) if($err);
|
||||
$val =~ s/^\s*,\s*//;
|
||||
$val =~ s/\s*$//;
|
||||
@ -5214,20 +5224,16 @@ json2nameValue($;$$)
|
||||
return (undef, $in);
|
||||
}
|
||||
|
||||
$in = $1 if($in =~ m/^\s*{(.*)}\s*$/s);
|
||||
|
||||
$in =~ s/^\s+//;
|
||||
$in =~ s/\s+$//;
|
||||
my $err;
|
||||
while($in =~ m/^\s*"([^"]+)"\s*:\s*(.*)$/s) {
|
||||
my ($name,$val) = ($1,$2);
|
||||
$name =~ s/[^a-z0-9._\-\/]/_/gsi;
|
||||
($err,$in) = eObj(\%ret, $map, $name, $val, $in, $prefix);
|
||||
if($err) {
|
||||
Log 4, $err;
|
||||
%ret = ();
|
||||
return \%ret;
|
||||
}
|
||||
$in =~ s/^\s*,\s*//;
|
||||
($err,$in) = eObj(\%ret, $map, "", $in, "", $prefix, 1);
|
||||
if($err) {
|
||||
Log 4, $err;
|
||||
%ret = ();
|
||||
return \%ret;
|
||||
}
|
||||
|
||||
return \%ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user