Json-Objekt manipulieren

Begonnen von TomLee, 02 April 2022, 13:27:15

Vorheriges Thema - Nächstes Thema

TomLee

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ß

Beta-User

"Nicht: escapte geschweifte rechte Klammer, dann diese Klammer"?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

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}

Beta-User

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

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#4
Davon ab das dein Beispiel das tut was es tut, ich das daraus resultierende Ergebnis 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.


Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#6
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 ?

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files