FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: TomLee am 02 April 2022, 13:27:15

Titel: Json-Objekt manipulieren
Beitrag von: TomLee am 02 April 2022, 13:27:15
Hi,

gegeben ist folgender Json:

{"result":{"balance":9999,"created":"22/03/2022 22:23:31","last_login":1648876825,"stake_bli":110.0,"stake_date":1650240000,"username":"username","verified":"maybe"},"server":"bla","success":true}

In einem MQTT2_Device möchte ich mir das mappen der Readingnamen sparen und darum das "result":{ und die schliessende Klammer } des Objekts? vor dem auspacken entfernen, so das nur noch Name/Value Werte vorhanden sind.

Das "result":{ zu entfernen darin sehe ich kein Problem, aber wie dann die schliessende Klammer ?

Bevor ich mich jetzt stundenlang damit beschäftige frag ich einfach, evtl. gibts ja auch noch ne ganz simple andere rangehensweise die ich einfach noch nicht kenne ?

Gruß
Titel: Antw:Json-Objekt manipulieren
Beitrag von: Beta-User am 02 April 2022, 14:38:12
"Nicht: escapte geschweifte rechte Klammer, dann diese Klammer"?
Titel: Antw:Json-Objekt manipulieren
Beitrag von: TomLee am 02 April 2022, 21:01:37
Sry, heut war Nichten-Tag  :P

Ich versteh nicht ganz wie das gemeint ist, es klappt aber einfach so, frage mich aber warum die letzte dann nicht auch entfernt wird :

{my $EVENT = q({"result":{"balance":9999,"created":"22/03/2022 22:23:31","last_login":1648876825,"stake_bli":110.0,"stake_date":1650240000,"username":"username","verified":"maybe"},"server":"bla","success":true});; $EVENT =~ s/(.result...)//;;$EVENT =~ s/}//;; $EVENT}
Titel: Antw:Json-Objekt manipulieren
Beitrag von: Beta-User am 03 April 2022, 08:46:05
Zitat von: TomLee am 02 April 2022, 21:01:37
Ich versteh nicht ganz wie das gemeint ist, es klappt aber einfach so, frage mich aber warum die letzte dann nicht auch entfernt wird :

{my $EVENT = q({"result":{"balance":9999,"created":"22/03/2022 22:23:31","last_login":1648876825,"stake_bli":110.0,"stake_date":1650240000,"username":"username","verified":"maybe"},"server":"bla","success":true});; $EVENT =~ s/(.result...)//;;$EVENT =~ s/}//;; $EVENT}
Nope. Da wird die erste schließende Klammer entsorgt, der daraus resultierende JSON ist dann anders strukturiert (enthält die "Enddaten" auf einer anderen Ebene)...
Dachte eher an sowas:s{.*result..([^\}]+\})}{$1}x

Titel: Antw:Json-Objekt manipulieren
Beitrag von: TomLee am 03 April 2022, 12:09:01
Davon ab das dein Beispiel das tut was es tut, ich das daraus resultierende Ergebnis (https://regex101.com/r/OekEtY/1) so nie erwartet hätte 8) ::), hab ich mich vlt. falsch ausgedrückt.

Ich will alle Name/Value Paare, mein simples Beispiel von oben macht das.

Trotzdem Danke für den gezeigten regexp, ich find das faszinierend und muss mich damit beschäftigen das zu verstehen.

Titel: Antw:Json-Objekt manipulieren
Beitrag von: Beta-User am 03 April 2022, 17:31:51
Hmm, irgendwie kann ich zwar nachvollziehen, wo dein "Schmerz" lag, aber irgendwie wäre mir das "lass die erste geschweifte Klammer weg" suspekt. json2nameValue() ist da zwar zwischenzeitlich unempfindlich, aber das Risiko wäre mir zu hoch, dass da ein ungültiger JSON rauskommt, wenn man es anders macht...
Titel: Antw:Json-Objekt manipulieren
Beitrag von: TomLee am 03 April 2022, 22:05:38
Zitat... aber das Risiko wäre mir zu hoch, dass da ein ungültiger JSON rauskommt, ...

Wenn wir von der gleichen "ersten geschweiften Klammer" reden (edit: s/}// vs. s/}//g ), kannst du dieses Risiko daß dir da im Kopf schwirrt bitte etwas näher erläutern.

Wenn grundsätzlich der Json in der API nicht geändert wird, bleibt die erste Klammer immer die erste Klammer ?
Titel: Antw:Json-Objekt manipulieren
Beitrag von: Beta-User am 04 April 2022, 07:54:41
Das ist mehr ein Bauchgefühl... Klar, wenn alle immer dasselbe tun, sollte es keine Probleme geben. Die Erfahrung lehrt aber: Irgendwann geht schief, was schiefgehen kann, und "kappute JSON-blobs" sind halt ein "beliebter" Grund für crashes.

Ergo versuche ich sowas möglichst zu vermeiden.