Hey there,
I want to convert an array to a Json object. I've tried many ways but i didn't get the format I want!
I want to get the following result:
payload: " {"Val1" : 10, "Val2" : 11, "Val3: 12} "
Plus, I have a subflow that returns a value, how can I put this value in a Json object, say "Value1" : 20 ?
Sorry to nitpick but Json object is not a thing.
JSON is a string representation of a JavaScript object.
Ok, enough of that
Use a function node, loop through the elements & add properties to an object...
var arr = msg.payload; // get the array
var rv = {};// create a new empty object
for (var i = 0; i < arr.length; ++i) {
let key = "Val"+(i+1); //built a key
rv[key] = arr[i]; // set value in New object
}
msg.payload = nv;
return msg;
There are other, more modern/compact ways to achieve this but I kept it simple for clarity.
Disclaimer: the above code is untested/off the top of my head.
Thank you for the clarification!
I'm able to parse the array and get the values but I want to assign names to them, each value has a different name. how can I change their names from Val1 Val2...?
unless you tell me what they are I cannot really help. an array is just a group of values.
If you know which element is which item & they are always in the same place & there are always a fixed number of elements in the array, you can simply set them manually in the object.
However, there may be a better solution - we should look at that first.
Where does this array come from? can you show me how this array is generated?
var names = ["name1","another_name","any_anme_you_wish"];// list of names
var hold_obj = {};// `temp object
names.forEach ((v,i) => hold_obj[v] = msg.payload[i]) //loop through names and add to object
msg.payload = hold_obj; // move back to payload
return msg;