NEWS
Json korrekt parsen
-
Hi allerseits,
ich bekomme folgende Payload von meinem Mqtt und muss hier ein paar Werte rausholen. Das klappt soweit auch aber bei einem Wert scheitere ich. Hier mal zunächst die Payload:{ "end_device_ids": { "device_id": "bodensensor-hinten", "application_ids": { "application_id": "garden-soil-sensors" }, "dev_eui": "", "join_eui": "", "dev_addr": "" }, "correlation_ids": [ "as:up:01FMJMEY3F4R8BRK933ZF831B8", "gs:conn:01FMHQKYR8ACAACXVMR5ETGBX0", "gs:up:host:01FMHQKYRRTNB1Y256R5BBFZ5B", "gs:uplink:01FMJMEXW5QENYW0X7ESBWKT7E", "ns:uplink:01FMJMEXW6V0WTERVH73FZ316Q", "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01FMJMEXW64H4ZYQGZ6JYFSBK3", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01FMJMEY3ETSZPN33KJ591WZ1K" ], "received_at": "2021-11-15T20:26:20.655807658Z", "uplink_message": { "session_key_id": "AX0kon3s3ubZFDDLFdgJEw==", "f_port": 2, "f_cnt": 9, "frm_payload": "DS4AAAAACLQAABA=", "decoded_payload": { "Bat": "3.374 V", "TempC_DS18B20": "0.00 °C", "conduct_SOIL": "0 uS/cm", "temp_SOIL": "22.28 °C", "water_SOIL": "0.00 %" }, "rx_metadata": [ { "gateway_ids": { "gateway_id": "myindoorgatewayhub", "eui": "" }, "time": "2021-11-15T20:26:20.344300985Z", "timestamp": 177918228, "rssi": -63, "channel_rssi": -63, "snr": 10.75, "location": { "latitude": 51.7100722182447, "longitude": 7.923237383365632, "altitude": 5, "source": "SOURCE_REGISTRY" }, "uplink_token": "CiAKHgoSbXlpbmRvb3JnYXRld2F5aHViEghYoMv//oBEFBCUoutUGgwI7ITLjAYQuPfgyAEgoOyC5pbwBioMCOyEy4wGELm7lqQB" } ], "settings": { "data_rate": { "lora": { "bandwidth": 125000, "spreading_factor": 7 } }, "coding_rate": "4/5", "frequency": "867900000", "timestamp": 177918228, "time": "2021-11-15T20:26:20.344300985Z" }, "received_at": "2021-11-15T20:26:20.422462557Z", "consumed_airtime": "0.061696s", "locations": { "user": { "latitude": 51.71014867049504, "longitude": 7.923138141632081, "source": "SOURCE_REGISTRY" } }, "version_ids": { "brand_id": "dragino", "model_id": "lse01", "hardware_version": "_unknown_hw_version_", "firmware_version": "1.3", "band_id": "EU_863_870" }, "network_ids": { "net_id": "000013", "tenant_id": "ttn", "cluster_id": "ttn-eu1" } } }
Ich bekomme die Werte indem ich die Payload mit dem "JSON nach Objekt" Baustein in ein Objekt umwandle und mit dem "ATTRIB" Baustein und der Pfadangabe bekomme ich die Werte bis auf einen!
Folgende Pfade funktionieren super und ich kriege ein Ergebniss:
uplink_message.decoded_payload.Bat uplink_message.decoded_payload.water_SOIL uplink_message.decoded_payload.conduct_SOIL uplink_message.decoded_payload.temp_SOIL
Ich möchte aber noch den Wert rssi haben der in rx_metadata steckt. Vergeblich.
Dieser Pfad funktioniert nicht:uplink_message.rx_metadata[0].rssi
Das sollte er aber oder übersehe ich hier was ?
Wenn ich nur uplink_message.rx_metadata verwende bekomme ich alles angezeigt was da drin steckt, darunter auch rssi aber ich kann nicht explizit darauf zugreifen.
Jemand eine Idee ? -
Was hast du bereits gemacht?
Blockly oder js?Wenn ich mich jetzt in den Ebenen nicht verrant habe müüsste es sein:
Attribut von: uplink_message.rx_metadata.0.rssi -
@homoran sagte in Json korrekt parsen:
Was hast du bereits gemacht?
Blockly oder js?Wenn ich mich jetzt in den Ebenen nicht verrant habe müüsste es sein:
Attribut von: uplink_message.rx_metadata.0.rssi@joker971 sagte in Json korrekt parsen:
Das sollte er aber oder übersehe ich hier was ?
keine Array-Klammern sondern Punkte zur Ebenentrennung
-
@joker971 sagte in Json korrekt parsen:
uplink_message.rx_metadata[0].rssi
versuche
uplink_message.rx_metadata.0.rssi
. getAttr() funktioniert hier nicht wie erwartet -
@homoran
Alles hab ich versucht, nur nicht die Klammern mal weg zu lassen
Daaaaanke für den Denkanstoss, das funktioniert jetzt -
-
@homoran sagte in Json korrekt parsen:
keine Array-Klammern sondern Punkte zur Ebenentrennung
ja, in JS würde man es aber mit Klammer machen (müssen!)
-
@fastfoot
ich habe es in JS getestet und eckige array-klammern verwendet
am besten du schreibst deine version mal hin -
@oliverio sagte in Json korrekt parsen:
@fastfoot
ich habe es in JS getestet und eckige array-klammern verwendet
am besten du schreibst deine version mal hinich gehe davo aus dass er es in Blockly probiert hat, welches getAttr() verwendet und dort klappt das mit Klammer eben nicht
-
Es geht jetzt, ohne Klammern !
Danke euch -
@fastfoot sagte in Json korrekt parsen:
ich gehe davo aus dass er es in Blockly probiert hat
ich auch, seine Formulierung:
@joker971 sagte in Json korrekt parsen:
mit dem "JSON nach Objekt" Baustein in ein Objekt umwandle und mit dem "ATTRIB" Baustein
waren ziemlich eindeutig.
und in Blockly muss man .0. sattt [0] nehmen, außer man geht mehrstufig vor indem man erst das Array zelegt und dann darin weitermacht
-
Ja natürlich Blockly, das ist doch auch das Blockly-Forum