# Jsonata solution capturing a key name in msg.payload?

**URL:** https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991
**Category:** General
**Created:** [24 December 2020 22:06 UTC](https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991 "2020-12-24T22:06:42Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![gr1nch](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gr1nch/32/14302_2.png) [@gr1nch](https://discourse.nodered.org/u/gr1nch)
#### Post date: [24 December 2020 22:06 UTC](https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991/1 "2020-12-24T22:06:42Z")

</div>

Hi, I've spent hours looking at the forum, nodered docs, jsonata docs, tinkering etc to find a solution that for some of you will be really simple and already known. Yes, I could use a function node, but am thinking a change node with jsonata should do it.

With a Sonoff 4CHAN R3 which contains 4 independent switches, I am trying to parse the mqtt messages

`stat/heating/underfloor/RESULT {"POWER4":"ON"}`

The key value changes and is one of POWER1, POWER2, POWER3, POWER4.

For elegance and simplicity I'd prefer one node that takes this JSON object and outputs a new msg.payload based on both the key and the value.

{ "zone" = "POWER4", "power" = "ON" }

What jsonata would work?

---

<div class="post-metadata">

### Author: ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)
#### Post date: [24 December 2020 22:19 UTC](https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991/2 "2020-12-24T22:19:37Z")

</div>

JSONata:

```auto
{
    "zone": $keys(payload),
    "power": $lookup(payload, $keys(payload))
    
}

```

Honestly, not worth the effort, easier to use a function node.

---

<div class="post-metadata">

### Author: ![gr1nch](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gr1nch/32/14302_2.png) [@gr1nch](https://discourse.nodered.org/u/gr1nch)
#### Post date: [25 December 2020 20:52 UTC](https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991/3 "2020-12-25T20:52:02Z")

</div>

That worked a treat, thanks!

For anyone else that gets stuck with the same thing, here's my flow for the Sonoff 4Chan switch for retaining on/off events in InfluxDB.

```auto
[{"id":"ad7da3bd.5e463","type":"mqtt in","z":"7294ec0e.c3b4a4","name":"","topic":"stat/heating/underfloor/+","qos":"2","datatype":"json","broker":"2a8957f2.2dd3b8","x":130,"y":660,"wires":[["747bc489.e04ecc"]]},{"id":"747bc489.e04ecc","type":"change","z":"7294ec0e.c3b4a4","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{ \"zone\": $keys(payload), \"power\": $lookup(payload, $keys(payload)) }","tot":"jsonata"},{"t":"change","p":"payload.power","pt":"msg","from":"ON","fromt":"str","to":"1","tot":"num"},{"t":"change","p":"payload.power","pt":"msg","from":"OFF","fromt":"str","to":"-1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":660,"wires":[["ee5461b4.e4981"]]},{"id":"ee5461b4.e4981","type":"function","z":"7294ec0e.c3b4a4","name":"MQTT to InfluxDB","func":"msg.payload = \"power,zone=\" + msg.payload.zone + \" power=\" + msg.payload.power ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":570,"y":660,"wires":[["9dac1a3d.735448"]]},{"id":"9dac1a3d.735448","type":"http request","z":"7294ec0e.c3b4a4","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://localhost:8086/write?db=nodered","tls":"","persist":true,"proxy":"","authType":"basic","x":750,"y":660,"wires":[[]]},{"id":"2a8957f2.2dd3b8","type":"mqtt-broker","name":"ns2","broker":"192.168.1.8","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

```

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)
#### Post date: [8 January 2021 20:52 UTC](https://discourse.nodered.org/t/jsonata-solution-capturing-a-key-name-in-msg-payload/37991/4 "2021-01-08T20:52:04Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
