FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Wolfgang Hochweller am 13 Oktober 2017, 11:09:40

Titel: Perl und JSON
Beitrag von: Wolfgang Hochweller am 13 Oktober 2017, 11:09:40
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 ?

Titel: Antw:Perl und JSON
Beitrag von: viegener am 13 Oktober 2017, 11:48:06
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.
Titel: Antw:Perl und JSON
Beitrag von: Wolfgang Hochweller am 13 Oktober 2017, 11:54:07
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.
Titel: Antw:Perl und JSON
Beitrag von: viegener am 13 Oktober 2017, 12:07:15
Dann solltest Du vielleicht erklären was Du willst - für mich war klar, dass Du mit dem print die ganze Struktur ausgeben willst
Titel: Antw:Perl und JSON
Beitrag von: viegener am 13 Oktober 2017, 12:16:10
Wenn es nur um den Inhalt von statusType und danach ein Zeilenumbruch geht, wäre es

print $perl->{statusType}."\n";

Titel: Antw:Perl und JSON
Beitrag von: Wolfgang Hochweller am 13 Oktober 2017, 12:23:09
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.