这很简单。我在 Node-RED 中有两个流,每个流都带有一个 JSON对象。
如您所见:
最初在第一个路径上,我使用模板节点创建了一个新的JSON对象,然后将其传递到下一个节点。哪个效果很好。
现在,我有两个流,我要从中提取数据。
问题:“模板”节点一次仅接受一个输入。 结果是两个分离的新JSON对象。
但是,我的目标案例是这个组合的JSON对象:
{
"followupEventInput": {
"name": "{{response.prevIntent}}-{{response.utterances_tone.0.tones.0.tone_id}}",
"parameters": {
"tone_id": "{{response.utterances_tone.0.tones.0.tone_id}}"
},
"languageCode": "en-US"
}
}
response.utterances_tone.0.tones.0.tone_id
来自第一流。
response.prevIntent
来自第二个流程。
无法通过第一流程传递我所需的信息,因为在通过Tone Analyzer节点时,信息会丢失。
我尝试使用“拆分并连接”节点,但是它变得混乱了。
您是否知道如何顺利实施?
答案 0 :(得分:0)
看看join
节点。
此节点有多种模式,但是您需要一种在输出和对象之前对传入消息进行计数的模式。
这将输出一条消息,其中包含所有可用字段,但是您可能需要使用function
或change
节点将结构重新排列为所需的结构。
答案 1 :(得分:0)
最简单的方法是将两个功能“链接”在一起,形成一个流程-听起来您已经尝试这样做,但没有成功:
不可能将我需要的信息传递到第一个 流,因为通过音调分析器时信息会丢失 节点。
因此,似乎Tone Analyzer节点的输出将替换先前的有效负载,而不是将它们合并在一起-这是预料之中的。
一种解决方案是在每个函数之后放置一个change
节点-使用它将msg.response
移至另一个属性,例如msg.response1
和msg.response2
。然后,您可以使用template
节点来构建所需的输出结构。如果您从response1和response2属性中提取文本,则显示的“ mustache”语法应该可以工作,如下所示:
{
"followupEventInput": {
"name": "{{response2.prevIntent}}-{{response1.utterances_tone.0.tones.0.tone_id}}",
"parameters": {
"tone_id": "{{response1.utterances_tone.0.tones.0.tone_id}}"
},
"languageCode": "en-US"
}
}
只需确保将template
节点设置为“ Output as:Parsed JSON”。
哦,顺便说一句,您可能可以用核心function
节点替换“ Parse JSON” json
节点,该节点会为您进行解析...