Autor Thema: Json-Objekt manipulieren  (Gelesen 1479 mal)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4179
  • ... wer sät, der erntet ...
Json-Objekt manipulieren
« 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ß

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18687
Antw:Json-Objekt manipulieren
« Antwort #1 am: 02 April 2022, 14:38:12 »
"Nicht: escapte geschweifte rechte Klammer, dann diese Klammer"?
Server: HP-T620@Debian 11, 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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4179
  • ... wer sät, der erntet ...
Antw:Json-Objekt manipulieren
« Antwort #2 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}

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18687
Antw:Json-Objekt manipulieren
« Antwort #3 am: 03 April 2022, 08:46:05 »
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-T620@Debian 11, 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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4179
  • ... wer sät, der erntet ...
Antw:Json-Objekt manipulieren
« Antwort #4 am: 03 April 2022, 12:09:01 »
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.

« Letzte Änderung: 03 April 2022, 12:12:42 von TomLee »

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18687
Antw:Json-Objekt manipulieren
« Antwort #5 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...
Server: HP-T620@Debian 11, 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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4179
  • ... wer sät, der erntet ...
Antw:Json-Objekt manipulieren
« Antwort #6 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 ?
« Letzte Änderung: 03 April 2022, 22:16:02 von TomLee »

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18687
Antw:Json-Objekt manipulieren
« Antwort #7 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.
Server: HP-T620@Debian 11, 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

 

decade-submarginal