Ich versuche, einen JSON-String auszuwerten :
VerisureAlarm:.* {
use JSON;;
my $alarm = qx(vsure "user" "pass" armstate);;
my @perl = decode_json ( $alarm );;
print ( @perl . "\n");;
}
$alarm liefert mir :
{
"date": "2017-10-12T20:19:39.000Z",
"statusType": "DISARMED",
"name": "Wolfgang Hochweller",
"changedVia": "TAG",
"cid": "00767376"
}
Nach dem decode-Befehl liefert mir der print-Befehl fuer @perl : 1
Irgendwas fehlt mir ?
Ja zwei Dinge fehlen Dir
- decode_json liefert ein scalar zurück (deklariert mit $ nicht @), allerdings ist das dann eine REFERENCE auf ein etwaiges strukturiertes Element also muss es lauten:
my $perl = decode_json ( $alarm );;
- print kann nur ein einfaches scalar ausgeben, um die gesamte Struktur auszugeben müsstest Du dump verwenden, also müsste es da heissen:
print Data::Dumper->Dump($perl)(
So gibt der print nur die Länge Deines Arrays aus.
perl behandelt variablen etwas anders als andere Programmiersprachen, insbesondere das mit den skalaren Variablen und references solltest Du dir noch etwas anlesen.
Danke, kleine Korrektur :
VerisureAlarm:.* {
use JSON;;
my $alarm = qx(vsure "user" "pass" armstate);;
my $perl = decode_json ( $alarm );;
print ( $perl->{'statusType'} );;
}
Das liefert mir jetzt :
DISARMEDHASH(0x55650a8f3798)
Also fast das was ich will.
Dann solltest Du vielleicht erklären was Du willst - für mich war klar, dass Du mit dem print die ganze Struktur ausgeben willst
Wenn es nur um den Inhalt von statusType und danach ein Zeilenumbruch geht, wäre es
print $perl->{statusType}."\n";
Sorry, das print war ja eigentlich nur zur Kontrolle.
Von dem oben erwaehnten JSON-Objekt moechte ich den statusType ermitteln.
Das soll dann eine der drei Moeglichkeiten geben :
ARMED
DISARMED
ARMEDHOME
Das tut es jetzt auch.
Danke.