Это легко сделать с помощью JSONata, языка, облегчающего преобразование данных.
Основная часть вашего потока Node-RED будет узлом изменения с этим выражением JSONata:
payload.{"A_Key" :A_Key, "C_Key" :C_Key, "Properties" : {"B_Key" :B_Key, "F_Key" :F_Key, "X_Key" :X_Key}, "Extras" : {"D_Key" :D_Key, "E_Key" :E_Key }}
Это поток для импорта для вашего Node-RED, просто исправьте путь к имени файла:
[{"id":"52781b93.a86794","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"fc475896.7f6a68","type":"csv","z":"52781b93.a86794","name":"","sep":",","hdrin":true,"hdrout":"","multi":"mult","ret":"\\n","temp":"","skip":"0","x":430,"y":260,"wires":[["c6f562e7.6189c"]]},{"id":"282d5fcd.692cb","type":"debug","z":"52781b93.a86794","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":260,"wires":[]},{"id":"22fa22d.c2868de","type":"inject","z":"52781b93.a86794","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":260,"wires":[["93544cf8.57fad"]]},{"id":"93544cf8.57fad","type":"file in","z":"52781b93.a86794","name":"Read CSV","filename":"f1.csv","format":"utf8","chunk":false,"sendError":false,"x":280,"y":260,"wires":[["fc475896.7f6a68"]]},{"id":"c6f562e7.6189c","type":"change","z":"52781b93.a86794","name":"Prepare JSON","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.{\"A_Key\" :A_Key, \"C_Key\" :C_Key, \"Properties\" : {\"B_Key\" :B_Key, \"F_Key\" :F_Key, \"X_Key\" :X_Key}, \"Extras\" : {\"D_Key\" :D_Key, \"E_Key\" :E_Key }}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":260,"wires":[["282d5fcd.692cb"]]}]
EDIT: добавление потенциального ответа на ваш вопрос о ключе динамического элемента.
Если я правильно понял, вы хотите добавить к msg.payload
ключ, который является переменным.Для этой цели вы можете использовать Имена вычисляемых свойств Javascript .
В вашем функциональном узле это будет выглядеть так:
msg.payload = {
"A_Key": "Value 1",
"C_Key": msg.payload.C_Key,
"Properties": {
"B_Key": msg.payload.B_Key
},
//optionalPart: msg.optionalPart
[optionalPart]:["Z_Key"]
// or [msg.optionalPart]:["Z_Key"] if more appropriate for your logic
}
У вас будет ключ свойства "Дополнения "добавлены к msg.payload
.
В качестве дополнительного примечания (поскольку это не является частью вашего ОП), обратите внимание, что приведенный ниже код неясен и, вероятно, вызывает затруднения, если msg.payload.C_Key
и msg.payload.B_Key
неправильно инициализирован.
"C_Key": msg.payload.C_Key,
"B_Key": msg.payload.B_Key,