Problem mit json2nameValue

Begonnen von delMar, 20 Mai 2019, 22:17:14

Vorheriges Thema - Nächstes Thema

delMar

Hallo,

ich verstehe grad die Welt nicht mehr:
ich möchte einen String mit json2nameValue parsen. Hab das schon oft gemacht und hat auch immer funktioniert.
Außer diesmal:

Folgenden Code führe ich aus:

# $data enthält diesen String: {"version":"1.30.4","apiversion":"1.0"}
my $loadJson = json2nameValue($data);
Log3 $name, 4, "ReadHostInfo_Callback json string: $data || object: ".to_json($dataJson);

liefert im Log

2019.05.20 22:07:28 4:  ReadHostInfo_Callback json string: {"version":"1.30.4","apiversion":"1.0"} || object: {}


Warum ist $dataJson leer?
Ich bekomme auch tatsächlich keine Werte raus, das Problem liegt nicht im to_json.
Ich hab auch schon versucht, non-ascii characters zu entfernen (falls unsichtbare sonderzeichen drin sein sollten), auch ohne erfolg.
wie gesagt: ich verwende diese Funktion dauernd. Warum funktioniert sie hier nicht?
Vielen Dank!

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

Wuehler

Hallo Martin,

weil deine Variable einmal $loadJson und einmal $dataJson heißt vermutlich.

VG,
Dirk

delMar

Zitat von: Wuehler am 20 Mai 2019, 22:26:18
Hallo Martin,

weil deine Variable einmal $loadJson und einmal $dataJson heißt vermutlich.

VG,
Dirk

sorry, copy/paste fehler - ach, wär das schön gewesen.

ich hab das problem 2x in meinem code und hab jeweils einen teil kopiert (das hat man davon, wenn man bei der arbeit eine pause macht)
nochmal (jetzt aus der selben methode rauskopiert):

my $dataJson = json2nameValue($data);
Log3 $name, 4, "ReadHostInfo_Callback json string: $data || object: ".to_json($dataJson);
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

CoolTux

Kannst Du bitte einmal den ganzen JSON String hier zeigen.
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

hexenmeister

So, wie im ersten Post beschrieben - funktioniert bei mir:
fhem> {use Data::Dumper;;my $data='{"version":"1.30.4","apiversion":"1.0"}';;my $dataJson = json2nameValue($data);;Dumper($dataJson)}
$VAR1 = {
          'version' => '1.30.4',
          'apiversion' => '1.0'
        };
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

CoolTux

Oh das war schon der ganze String.
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

hexenmeister

auch so tut es ohne Murren:
fhem> {my $data='{"version":"1.30.4","apiversion":"1.0"}';;my $dataJson = json2nameValue($data);;toJSON($dataJson)}
{"apiversion":"1.0","version":"1.30.4"}
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

delMar

#7
Oh, Mann.

Warum to_json nix liefert, weiß ich nicht.
Mein Problem is aber glaub ich ein anderes:


# Anstatt es so zu machen
$dataJson->{apiversion}

# Hab ich es so gemacht
$dataJson->{'apiversion'}

# und deshalb hab ich dann wohl auch nie Werte erhalten...


Ich kann das erst am Abend verifizieren, aber ich werde berichten

PS: ein sehr schönes Beispiel dafür, wie man ein Problem so voreingenommen betrachten kann, dass man den relevanten Teil nicht einmal posted - sodass niemand die Chance hat, es überhaupt zu lösen.
Sorry Leute, ich gelobe Besserung
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Nein, das hat auch keinen Unterschied gemacht.
:-(

Die Beispiele von euch funktionieren aber auch bei mir.

Gibt es eine Möglichkeit, json2nameValue irgendwie zu debuggen?
json2reading funktioniert auch nicht, falls sich das jemand fragt (die beiden sind ja eng verwandt)
In einem anderen Modul von mir funktioniert das aber einwandfrei



Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.