json2nameValue geändertes Verhalten?

Begonnen von delMar, 01 Februar 2022, 22:15:02

Vorheriges Thema - Nächstes Thema

delMar

Hallo,
seit ein paar Tagen macht offenbar json2nameValue etwas anders als vorher.

Konkret kriege ich zB folgendes JSON rein und will mir den Wert von "Device" holen:

{
  "Header":{
    "Version":5,
    "Device":"87",
    "Timestamp":1643639621
  },...


Bisher hat $keyValues->{Header_Device} problemlos funktioniert.
Neuerdings kommt aber Use of uninitialized value $input in hash element at

Hat sich die Art geändert, wie ich Werte rauskriege?

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.

rudolfkoenig

ZitatHat sich die Art geändert, wie ich Werte rauskriege?

Soweit ich das beurteilen kann, nicht:
fhem> { my $x=json2nameValue('{ "Header":{ "Version":5, "Device":"87", "Timestamp":1643639621 } }');; join("\n", map { "$_ => $x->{$_}" } sort keys %{$x}) }
Header_Device => 87
Header_Timestamp => 1643639621
Header_Version => 5

delMar

Danke für die rasche Antwort.

Dein Beispiel funktioniert reproduzierbar bei mir.

Im Modul kommen allerdings trotzdem die uninitialized values.

Ich hab jetzt spaßeshalber die Änderung hier https://svn.fhem.de/trac/changeset/25544/trunk bei mir lokal mal zurückgebaut.
Und dann funktioniert es auch im Modul wieder.

Ich hab leider keine Ahnung, wo technisch der Unterschied zwischen einer Ausführung im Modul oder einer Ausführung in der Kommandozeile ist, ich denke aber, dass es hier ein Problem gibt.

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.

rudolfkoenig

ZitatIch hab jetzt spaßeshalber die Änderung hier https://svn.fhem.de/trac/changeset/25544/trunk bei mir lokal mal zurückgebaut.
Und dann funktioniert es auch im Modul wieder.
Mag sein, aber beide Aenderungen dienen nur der besseren JSON-konformitaet (Leerstring als Schluessel und Fliesskomma in der wissenschaftlichen Notation), und haben keine Auswirkungen auf das vorherige Beispiel.

Ich helfe gerne, aber ich brauche konkrete Hinweise.

delMar

Danke Rudi.

Das konkreteste, was ich derzeit weiß, ist, dass es im Modul nicht funktioniert, als direktes Kommando aber schon.

Ich werde versuchen, das Problem weiter einzugrenzen und für dich reproduzierbar zu machen und melde mich dann wieder.
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.

rudolfkoenig

Vielleicht hilft bei der Suche, dass neuerdings bei einem Syntax-Fehler der Eintrag json2nameValueErrorText und json2nameValueInput gesetzt wird.

delMar

Ich konnte den Fehler noch nicht isolieren, wollte aber nur mal zu Protokoll geben, dass bei zwei Usern vom Modul das Rückgängig machen der gestern erwähnten Änderung das Modul wieder funktioniert:

https://forum.fhem.de/index.php/topic,92740.msg1205419.html#msg1205419

Das Modul hat seit Jänner 2021 kein Update erfahren.
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

Mit dem heutigen Update funktioniert das Modul wieder.

Um verirrte Suchende hier nicht ohne Antwort zu lassen: es waren wohl zwei Probleme
zum Einen kam teilweise ein invalides JSON rein.
Da musste ich aber erstmal draufkommen.
Zur Fehlersuche wurde natürlich immer ein valides verwendet (also unmöglich nachzustellen)

zum Anderen hat Rudi dadurch auch ein Problem im Parser gefunden und behoben:
Zitat von: rudolfkoenig am 06 Februar 2022, 21:04:51
falls in einem JSON auf eine Zahl ein Newline folgte, hat der Parser versagt.

Danke für deine Hilfe Rudi
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.