json - 在 Node-Red 中合并两个 JSON 对象
问题描述
我在尝试将从我的 SQL Server 数据库中检索到的两个 JSON 对象合并到 Node-Red 中的单个对象中时遇到了一些麻烦。
对于对数据库的每次调用,我都会收到以下对象:
计划:
[{"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}]
解决方案
首先,我不会将它们设置为流变量,因为如果您在数据库查找发生时向 http-in 节点发出第二个请求,这些变量将被覆盖。最好将它们添加为msg
变量,然后它们与 一起流动msg
并且不能被覆盖。
鉴于您不只是组合 2 个对象来获得超级键和值集,您最好使用函数节点或更改自己组装到输出对象。
假设输入看起来像:
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;
更改节点规则看起来像
连接节点将使用主题作为键将 2 个对象放入一个数组或一个对象中,以保存 2 个输入消息。
推荐阅读
- sql - 在oracle中将varchar2转换为数字
- amazon-web-services - Terraform 解耦安全组依赖
- mysql - MySQL - 在存在 GROUP BY 的情况下删除 JSON_ARRAYAGG 中的重复结果
- python - 将字符串(字符串列表)转换为正则表达式
- powershell - Powershell - 更改控制台的 X 按钮行为
- java - Spring PUT-Request,最好的方法
- google-drive-api - Google Drive UI 集成中的文档图标未更新
- sql - 如何获得过去 30 天的总周数
- mysql - 不能在选择中使用用户变量
- arduino - GSM没有响应?