Access a payload property by using a string variable

My question is related to this Q&A as my problem is similar. I have a msg.payload which has several properties (as a matter of facts arrays, but this is not meaningful for the question) whose name is section_x where x is an integer which ranges fro 1 to at most 5 (I do not know a priori its value as it is determined by the action of several flows on the payload). I have to access one of these properties indexed by an integer i producer by another flow. I tried the following code following the cited Q&A

var v = [];
v = msg.payload.`section_${i}`; 
return msg;

but I did not succeed as the code does not compile. Now the questions:

  1. Can I access a payload property by using a similar expression? If yes, how?
  2. Where can I find examples of uses of the code as the one shown by Steve-Mcl in the Q&A cited above?

I don't know if you code is the correct way (without a good think about it :stuck_out_tongue: )... but I do know that you have to return the contents of v back to msg.payload before the return msg

msg.payload = v;

1 Like

Use RED.util.getObjectProperty

See similar thread here : Alternatives to eval() - #2 by Steve-Mcl

in your case...

var i = 1; // <<get from somewhere else. Hard coded to 1 for demo purposes
var varName = `section_${i}`
var v = RED.util.getObjectProperty(msg.payload, varName); 
1 Like

[ ] notation should work.

let i = "1";
msg.payload = msg.payload[`section_${i}`]; 
return msg;
1 Like

Wonderful, I tried it and it worked perfectly. Thank you, Steve.

I also tried your solutions and it works perfectly too: I decided to chose Steve's solution only since it suits better in my current project. However, I'll use yours in other occasions. Thank you, E1cid

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