在Node-RED中联接两个JSON对象

时间:2018-10-24 12:41:48

标签: json node-red

这很简单。我在 Node-RED 中有两个流,每个流都带有一个 JSON对象

如您所见:

Overview 最初在第一个路径上,我使用模板节点创建了一个新的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节点时,信息会丢失。

我尝试使用“拆分并连接”节点,但是它变得混乱了。

您是否知道如何顺利​​实施?

2 个答案:

答案 0 :(得分:0)

看看join节点。

此节点有多种模式,但是您需要一种在输出和对象之前对传入消息进行计数的模式。

这将输出一条消息,其中包含所有可用字段,但是您可能需要使用functionchange节点将结构重新排列为所需的结构。

答案 1 :(得分:0)

最简单的方法是将两个功能“链接”在一起,形成一个流程-听起来您已经尝试这样做,但没有成功:

  

不可能将我需要的信息传递到第一个   流,因为通过音调分析器时信息会丢失   节点。

因此,似乎Tone Analyzer节点的输出将替换先前的有效负载,而不是将它们合并在一起-这是预料之中的。

一种解决方案是在每个函数之后放置一个change节点-使用它将msg.response移至另一个属性,例如msg.response1msg.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节点,该节点会为您进行解析...