在Node-Red中合并两个JSON对象

时间:2019-11-27 18:18:00

标签: json node-red

尝试将从SQL Server数据库中检索到的两个JSON对象合并到Node-Red中的单个对象时遇到麻烦。

我创建的流程如下: enter image description here

对于数据库的每次调用,我都会收到以下对象:

计划:

[{"PlanID":2,"Status":0,"EndTime":"0001-01-01T00:00:00.000Z"}]

目标:

[{"GoalID":1,"PlanID":2, "Type":2,"Message":"Walk 1000 km","Difficulty":0}]

我创建了两个函数,将这些对象分配给流变量(“计划”和“目标”),现在我试图将这两个对象合并为一个JSON对象。

我不知道是否必须为此目的使用Join节点,以及如何配置它,但是我的想法是使用以下格式创建JSON对象:

[{"GoalID":1,"Plan":{"PlanID":2,"Status":0,"EndTime":"0001-01-01T00:00:00.000Z"}, "Type":2,"Message":"Walk 1000 km","Difficulty":0}]

1 个答案:

答案 0 :(得分:2)

首先,我不会将它们设置为流变量,因为如果在数据库查找发生时向http-in节点发出第二个请求,这些变量将被覆盖。最好将它们添加为msg变量,然后它们与msg一起流动并且不能被覆盖。

鉴于您不只是组合两个对象来获得键和值的超级集合,您可能最好仅使用功能节点或更改以自己组装到输出对象。

假设输入类似:

msg.plans = [{"PlanID":2,"Status":0,"EndTime":"0001-01-01T00:00:00.000Z"}]
msg.goals = [{"GoalID":1,"PlanID":2, "Type":2,"Message":"Walk 1000 km","Difficulty":0}]

然后功能节点将类似于:

msg.payload = msg.goals[0];
msg.payload.plan = msg.plans[0];
delete msg.goals;
delete msg.plans;
return msg;

更改节点规则看起来像

enter image description here

join节点可以将2个对象放入数组或使用主题作为保存2个输入消息的键的对象。