# Changing structure of msg.payload from multidimensional array

**URL:** <https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051>\
**Category:** General\
**Tags:** split, function-node, mqtt\
**Created:** [17 June 2022 08:28 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051 "2022-06-17T08:28:45Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Atheie](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/atheie/32/63379_2.png) [@Atheie](https://discourse.nodered.org/u/Atheie)\
**Post date:** [17 June 2022 08:28 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/1 "2022-06-17T08:28:45Z")

</div>

[["TT105"," 59"],["TT106"," 59"],["TT201"," 59"],["TT202"," 59"],["TT301"," 59"],["TT302"," 59"],["TT303"," 59"],["TT304"," 59"],["TT001"," 65"],["TT104"," 65"]]

This is my msg.payload - I want to redo the structure of the payload to match the structure of the following payload:

{"TT01":24,"TT11":27.9,"TT12":32.7,"TT13":38.1,"TT14":38,"TT15":39.5,"TT31":43.3,"TT32":42.7,"PT12":100.9,"PT21":40,"PT11":0.1,"FT21":0,"LT11":1589,"IT11":0,"IT12":0}

Any immediate thoughts on how I should approach this? 🙂

Thanks!

---

<div class="post-metadata">

**Author:** ![Atheie](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/atheie/32/63379_2.png) [@Atheie](https://discourse.nodered.org/u/Atheie)\
**Post date:** [17 June 2022 10:26 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/2 "2022-06-17T10:26:27Z")

</div>

Edit:  
I have remade the structure so I now get one payload per element;  
payload = "TT104: 32"  
I now want to make it so that my payload is a multidimensional array,:  
Msg.payload[0][0], where msg.payload[0] = "TT104" and msg.payload[0][0] = 32 (numeric), any ideas?

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [17 June 2022 10:33 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/3 "2022-06-17T10:33:56Z")

</div>

> [@Atheie](#):
>
> Msg.payload[0][0], where msg.payload[0] = "TT104" and msg.payload[0][0] = 32 (numeric), any ideas?

Setting payload[0] to "tt104", means you can not set payload[0][0] as the payload[0] is now a string, so [0][0] can not exist.

I think you need to explain more clearly what you require, and may be what you wish to do/achieve.

---

<div class="post-metadata">

**Author:** ![Atheie](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/atheie/32/63379_2.png) [@Atheie](https://discourse.nodered.org/u/Atheie)\
**Post date:** [17 June 2022 10:42 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/4 "2022-06-17T10:42:27Z")

</div>

Ah I understand.

I want to convert my payload from the string structure "TT104: 32" to a JSON object type:  
{"TT104":32}  
So I can seperate the tag name from the value when parsed to an Influx database:)

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [17 June 2022 10:44 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/5 "2022-06-17T10:44:17Z")

</div>

show us a debug of incoming string, and explain where it comes form.

---

<div class="post-metadata">

**Author:** ![Atheie](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/atheie/32/63379_2.png) [@Atheie](https://discourse.nodered.org/u/Atheie)\
**Post date:** [17 June 2022 10:51 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/6 "2022-06-17T10:51:11Z")

</div>

{"topic":"MQTT","payload":"TT001: 56/TT104: 56/TT105: 56/TT106: 56/TT201: 56/TT202: 56/TT301: 56/TT302: 56/TT303: 56/TT304: 56/@MYSITE","qos":1,"retain":false,"\_msgid":"467147b9.1b7d28"}

This is the output from my MQTT node:  
I managed to seperate @MYSITE and parse it as  
msg.measurement : "MYSITE"

Preferrably I would really like to maintain all the variables in one payload and redo the payload:  
payload":"TT001: 56/TT104: 56/TT105: 56/TT106: 56/TT201: 56/TT202: 56/TT301: 56/TT302: 56/TT303: 56/TT304: 56/"

To obtain the following structure:  
payload:{"TT001":56,"TT104":56,"TT105":56"..."IT304":56}

---

<div class="post-metadata">

**Author:** ![Alejandro](https://avatars.discourse-cdn.com/v4/letter/a/ee7513/32.png) [@Alejandro](https://discourse.nodered.org/u/Alejandro)\
**Post date:** [17 June 2022 10:57 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/7 "2022-06-17T10:57:14Z")

</div>

This looks more like a question of how JS works, maybe you should try to ask those on another forum for a better answer.

In the meantime, I would do something like

```nohighlight
const input = [["a", 1], ["b", 2]];
const output = {}
input .map(([key, value]) => { output [key]=value})
output // { a: 1, b: 2 }

```

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [17 June 2022 11:05 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/8 "2022-06-17T11:05:09Z")

</div>

> [@Atheie](#):
>
> "TT001: 56/TT104: 56/TT105: 56/TT106: 56/TT201: 56/TT202: 56/TT301: 56/TT302: 56/TT303: 56/TT304: 56/@MYSITE

do you have control on how the mqtt payload is constructed? As it would be best to send the string in json format, then you would not need to do any thing to convert it.  
If you can not change the mqtt payload, this should work

```auto
[{"id":"8b0f0b705735122d","type":"inject","z":"bf9e1e33.030598","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"\"TT001: 56/TT104: 56/TT105: 56/TT106: 56/TT201: 56/TT202: 56/TT301: 56/TT302: 56/TT303: 56/TT304: 66/@MYSITE","payloadType":"str","x":150,"y":3280,"wires":[["b238257.6f33858"]]},{"id":"b238257.6f33858","type":"function","z":"bf9e1e33.030598","name":"","func":"msg.payload = msg.payload.split(\"/\").slice(0,-1);\nmsg.payload = msg.payload.reduce((acc,str) =>{\n let arr = str.split(\": \");\n return Object.assign(\n acc,\n {[arr[0]]:arr[1]})\n},{})\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":3260,"wires":[["9c792ae0.1bc0b"]]},{"id":"9c792ae0.1bc0b","type":"debug","z":"bf9e1e33.030598","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":640,"y":3300,"wires":[]}]

```

---

<div class="post-metadata">

**Author:** ![Atheie](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/atheie/32/63379_2.png) [@Atheie](https://discourse.nodered.org/u/Atheie)\
**Post date:** [19 June 2022 21:12 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/9 "2022-06-19T21:12:16Z")

</div>

Thank you so, so much for this excellent flow. It worked perfectly!

As you probably understand, I'm rather new to JS and I just needed to get this working asap.

I am so grateful 🙂

---

<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:** [3 July 2022 21:12 UTC](https://discourse.nodered.org/t/changing-structure-of-msg-payload-from-multidimensional-array/64051/10 "2022-07-03T21:12:41Z")

</div>

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