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
Hallo Martin,
weil deine Variable einmal $loadJson und einmal $dataJson heißt vermutlich.
VG,
Dirk
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);
Kannst Du bitte einmal den ganzen JSON String hier zeigen.
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'
};
Oh das war schon der ganze String.
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"}
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
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