Hauptmenü

Perl und JSON

Begonnen von Wolfgang Hochweller, 13 Oktober 2017, 11:09:40

Vorheriges Thema - Nächstes Thema

Wolfgang Hochweller

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 ?


viegener

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.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Wolfgang Hochweller

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.

viegener

Dann solltest Du vielleicht erklären was Du willst - für mich war klar, dass Du mit dem print die ganze Struktur ausgeben willst
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Wenn es nur um den Inhalt von statusType und danach ein Zeilenumbruch geht, wäre es

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

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Wolfgang Hochweller

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.