expandJSON und true/false

Begonnen von Icinger, 04 September 2018, 16:37:53

Vorheriges Thema - Nächstes Thema

Icinger

Hi,

habe hier grade dass "Problem", dass in einer MQTT-Payload

{"battery":"100.00","voltage":3155,"smoke":false}
steht.

Battery und Voltage werden brav vom expandJSON aufgedröselt, allerdings "smoke" wird einfach ignoriert.
lt. JSON-Tester ist das so aber valid.

Wenn ich jetzt das false/true in Anführungszeichen stelle, dann klappt das auch.
{"battery":"100.00","voltage":3155,"smoke":"false"}

Jemand eine Idee/Lösung?

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

CoolTux

#1
Das liegt daran das decode_json() aus true und false ohne Anführungszeichen 1 und 0 macht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dev0

#2
Nicht ganz, ich hatte (eigentlich) extra dafür eine Abfrage eingebaut, kann mich aber im Moment nicht mehr an Details erinnern. Siehe hier.

Fehlt vielleicht einfach nur das Perl Modul 'JSON::XS::Boolean'?

Edit: Sorry für die verzögerte Anwort, aber ich wurde nicht (per Mail) über diesen neuen Thread mit "expandJSON" im Subject informiert. Ich hoffe, dass das Ab- und wieder Anbestellen der neuen Threads in diesem Board nun wieder funktioniert. Ich habe den Thread eher durch Zufall entdeckt...

Icinger

Warning: Cannot install JSON::XS::Boolean, don't know what it is.
Try the command

    i /JSON::XS::Boolean/

to find objects with matching identifiers.

cpan[2]> cpan[2]> i /JSON::XS::Boolean/
No objects found of any type for argument /JSON::XS::Boolean/


Das ist ja eigentlich nur ein Dummy, lt. metacpan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

hdo

Hmm interessant. Ich habe seit gestern auch expanJSON im Einsatz (zigbee2mqtt) und mir ist auch aufgefallen, dass Boolean-Werte in JSON verschluckt werden.

Laut Changelog wurde das bereits seit Februar behoben, aber ich habe defintiv die aktuelle Version.

Evtl. gibt es noch weitere Dependencies? In den Logs war nichts zu sehen.

hdo

Mea Culpa!

Nach ein wenig Spielerei habe ich das Problem bei mir gefunden, es lag am JSON Modul.

Ich habe es mit 'sudo cpan install JSON:PP' installiert aber es musste mit 'sudo cpan install JSON' installiert werden.

Danach funktionierte expandJSON auch wie erwartet mit Boolean Werten ;-)

dev0

Laut meinen Installationsnotizen habe ich die Perl Modul JSON und JSON::XS via CPAN Repository installiert...
Damit funktioniert diese Abfrage problemlos:
if (ref($ref) eq "JSON::PP::Boolean") {...}

hdo

Danke für die Info ;-)

Bei mir hat es mit der Installation von JSON::XS nicht funktioniert.

Erst als ich danach JSON installiert hatte ging es. Offenbar wird dabei irgendetwas konfiguriert,
denn ich habe bei mir sowohl JSON:PP als auch JSON:XS drin.

Icinger

Benötigt scheinbar BEIDE Module.....

Hatte erst nur JSON installiert, ging nicht --> danach noch JSON::XS installiert, seither klappt es.
Also eigentlich genau umgekehrt zu hdo's Version.

Könntest du evtl. in der CommandRef so erwähnen.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

dev0