# Saving variables from a JSON object

**URL:** <https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600>\
**Category:** General\
**Created:** [19 July 2021 17:53 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600 "2021-07-19T17:53:38Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 17:53 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/1 "2021-07-19T17:53:38Z")

</div>

Hello, I am working on finding a way to do something in an easy way and also run in less amount of time.  
I have a function that return a msg.payload in JSON format. It sends totally different messages but they are unique and only repeats if there is new value coming for example

1. {Voltage: 23, Current:2}  
2.{DEV: 23}

I have a lot of variables coming from one node, around 300 variables. I need to save each value to variable and keep updating it once there is a new value coming out of that node, as the node is overwriting new data each second to the msg.payload

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [19 July 2021 18:21 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/2 "2021-07-19T18:21:06Z")

</div>

If your data has a different topic for each type (or you can add a topic) then you can store the whole payload in flow or global context using a function node e.g..

```auto
var sensors = flow.get("sensors") || {}; //get the sensors state from flow context
var sensorName = msg.topic; //get sensor name from incoming msg
sensors[sensorName] = msg.payload; //store value under a key in the sensors object 
flow.set("sensors", sensors); //update the flow context

```

---

<div class="post-metadata">

**Author:** ![MecatronicaMADE](https://avatars.discourse-cdn.com/v4/letter/m/ce7236/32.png) [@MecatronicaMADE](https://discourse.nodered.org/u/MecatronicaMADE)\
**Post date:** [19 July 2021 18:21 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/3 "2021-07-19T18:21:59Z")

</div>

Hi @mafify Welcome. You can use the change node to save each value in a different flow variable. for example!!

---

<div class="post-metadata">

**Author:** ![MecatronicaMADE](https://avatars.discourse-cdn.com/v4/letter/m/ce7236/32.png) [@MecatronicaMADE](https://discourse.nodered.org/u/MecatronicaMADE)\
**Post date:** [19 July 2021 18:29 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/4 "2021-07-19T18:29:14Z")

</div>

For basic example:

> [@mafify](#):
>
> {Voltage: 23, Current:2}

![Captura de pantalla 2021-07-19 a la(s) 1.25.26 p. m.](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/d/3/d3aa625618193fc1cd5e6fc2bab33448e0d625ee.png)

![Captura de pantalla 2021-07-19 a la(s) 1.23.30 p. m.](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/7/e754234e6cf1784dca32711f0c3a774b1eaa93bf.png)

![Captura de pantalla 2021-07-19 a la(s) 1.26.07 p. m.](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/d/0d6043c9a34ba399f5d47f4ab7ccd6464223d578.png)

and you could see in the context:  
 ![Captura de pantalla 2021-07-19 a la(s) 1.26.26 p. m.](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/b/0bc4fd1c4aa4ed1bb81a1629bebe9f7295228333.png)

i hope it helps you!!

---

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 18:53 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/5 "2021-07-19T18:53:57Z")

</div>

That what I did in a function node, but when the second JSON message arrive and it have different topics as ID and MID. The output of change node will output undefined.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [19 July 2021 18:55 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/6 "2021-07-19T18:55:51Z")

</div>

Who is that a reply to?

Did you try the function I posted?

Does your data have different topic for different payloads?

---

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 19:04 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/7 "2021-07-19T19:04:52Z")

</div>

Hello, yes I just tried it. after the JSON sent first object which is {ID:208}, the function saved it, when second message is sent from JSON which is {L:60}, the function returned it undefined

---

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 19:10 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/8 "2021-07-19T19:10:07Z")

</div>

that's how I tried the function, thank you 😅

```auto
var sensors = flow.get ("Sensors") || {};
var ID = msg.payload.ID;
sensors[ID] = msg.payload;
flow.set("sensors",sensors);
return msg; 

```

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [19 July 2021 19:11 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/9 "2021-07-19T19:11:41Z")

</div>

Do your messages have individual topics like I asked?

---

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 19:19 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/10 "2021-07-19T19:19:55Z")

</div>

No, messages are only one part, there is no different topics

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/f/4/f48a08512e8db6b83219d2a10ce33af5a6c84fb4.png)

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [19 July 2021 19:58 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/11 "2021-07-19T19:58:15Z")

</div>

A function node containing this will merge all previous values with the current values in the payload, if that is what you are looking for

```auto
let values = flow.get("values") || {}
Object.assign( values, msg.payload)
flow.set("values", values)
msg.payload = values
return msg;

```

Example flow:

```auto
[{"id":"fc5427b9.f8d0f8","type":"debug","z":"84405ff5.25fa6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":630,"y":1260,"wires":[]},{"id":"fe1a639c699fc2ec","type":"inject","z":"84405ff5.25fa6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"a\":1,\"b\":2}","payloadType":"json","x":210,"y":1240,"wires":[["50c9c922cf4da5e7"]]},{"id":"40f54be8c9bda68c","type":"inject","z":"84405ff5.25fa6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"c\": 3}","payloadType":"json","x":190,"y":1300,"wires":[["50c9c922cf4da5e7"]]},{"id":"50c9c922cf4da5e7","type":"function","z":"84405ff5.25fa6","name":"Merge","func":"let values = flow.get(\"values\") || {}\nObject.assign( values, msg.payload)\nflow.set(\"values\", values)\nmsg.payload = values\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":1260,"wires":[["fc5427b9.f8d0f8"]]},{"id":"51904c66d8f80f90","type":"inject","z":"84405ff5.25fa6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"c\": 4}","payloadType":"json","x":190,"y":1360,"wires":[["50c9c922cf4da5e7"]]}]

```

By the way, it isn't a JSON object, JSON is always a string. It is a javascript object.

---

<div class="post-metadata">

**Author:** ![mafify](https://avatars.discourse-cdn.com/v4/letter/m/b5ac83/32.png) [@mafify](https://discourse.nodered.org/u/mafify)\
**Post date:** [19 July 2021 20:09 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/12 "2021-07-19T20:09:37Z")

</div>

That is what I am looking for, Thank you do much!!

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [19 July 2021 20:11 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/13 "2021-07-19T20:11:35Z")

</div>

The key was to Google for  
javascript merge objects

---

<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:** [15 September 2021 17:46 UTC](https://discourse.nodered.org/t/saving-variables-from-a-json-object/48600/14 "2021-09-15T17:46:11Z")

</div>

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