WSO2流处理器:无法解析json消息

WSO2流处理器:无法解析json消息,wso2,wso2carbon,siddhi,wso2sp,Wso2,Wso2carbon,Siddhi,Wso2sp,我正在使用流处理器4.3.0 我创建了一个siddhi应用程序,其源代码为mqtt,消息类型为json 在sink中,我也使用mqtt和message作为json。基本上,不需要转换消息 源mqtt中的主题消息如下所示 { "value1" : 59.698437, "value2" : 14.977777, "valid" : true } 理想情况下,应该将其发送到sink mqtt代理主题 现在,为了测试这一点,我使用/editor中的事件模拟器来测试sidhi应用程序。输入虚拟值后,将

我正在使用流处理器4.3.0 我创建了一个siddhi应用程序,其源代码为mqtt,消息类型为json

在sink中,我也使用mqtt和message作为json。基本上,不需要转换消息

源mqtt中的主题消息如下所示

{
"value1" : 59.698437,
"value2" : 14.977777,
"valid" : true
}
理想情况下,应该将其发送到sink mqtt代理主题

现在,为了测试这一点,我使用/editor中的事件模拟器来测试sidhi应用程序。输入虚拟值后,将生成提要作为

{
"event" : {
    "value1" : "59.698437",
    "value2" : "14.977777",
    "valid" : true
}
已成功传输到接收器主题

现在,在实际的消息馈送和模拟器生成的有区别。它在消息中有事件对象,这就是为什么编辑器理解这一点,并使其他消息(没有事件对象)无效。
有没有办法,流处理器也可以在没有事件的情况下处理提要?如何检查下沉消息没有事件?

您必须使用JSON映射器类型中的自定义映射来解析所需的JSON输入

@source(type='mqtt', 
@map(type='json', enclosing.element="$", @attributes(value1 = "value1", value2 = "value2", isValid = "valid")))
define stream InputStream(value1 string, value2 string, isValid bool);
更多信息请参见API文档下的示例

您可以使用日志接收器类型检查已发布的事件。确保使用相同的映射配置

@sink(type='log', 
@map(type='json', enclosing.element="$", @attributes(value1 = "value1", value2 = "value2", isValid = "valid")))


感谢Niveathika的回答。但是,根据文档()这是一个可选的确认。我们可以禁用它吗?如果源提要没有,那么接收器提要也不应该得到它?我得到了一个封闭的。element=是用来添加的,以防我们需要它