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
Das liegt daran das decode_json() aus true und false ohne Anführungszeichen 1 und 0 macht.
Nicht ganz, ich hatte (eigentlich) extra dafür eine Abfrage eingebaut, kann mich aber im Moment nicht mehr an Details erinnern. Siehe hier (https://forum.fhem.de/index.php/topic,82734l).
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...
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
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.
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 ;-)
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") {...}
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.
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
Ist erledigt.