【问题标题】:WSO2 CEP : Handle complex input JSON objectsWSO2 CEP:处理复杂的输入 JSON 对象
【发布时间】:2016-07-12 16:50:16
【问题描述】:

我目前正试图弄清楚如何在 WSO2 CEP 中处理复杂的数据输入。假设我有一个如下所示的输入事件数据:

{
    "item_id":456,
    "user_id":42,
    "documents":[
            {
                "type":"word",
                "name":"ordre de mission"
            },
            {
                "type":"excel",
                "name":"horaires"
            },
            {
                "type":"pdf",
                "name":"facture"
            }
        ]
}

在理想情况下,我希望将其分解为 3 个事件,如下面的数组所示:

[
    {
        "item_id":456,
        "user_id":42,
        "type":"word",
        "name":"ordre de mission"
    },
    {
        "item_id":456,
        "user_id":42,
        "type":"excel",
        "name":"horaires"
    },
    {
        "item_id":456,
        "user_id":42,
        "type":"pdf",
        "name":"facture"
    }
]

我只是不知道如何获得这样的东西......我正在考虑重新注入 "documents" 数组,就像它是一个单独的事件一样,因此 CEP 会将数组拆分为 3 个流项。但即使我能做到这一点,item_id 和 user_id 也会在这个过程中丢失...... 到目前为止,我唯一得到的是,文档字段在我的流中变成了序列化字符串,因此检索其中包含的实际数据似乎没有用......

我在这里展示的示例与我必须管理的其他内容相比非常简单,封装的对象和数组位于多个层中。因此,如果有人可以为我指出一个关于如何处理数组和对象的一般方向,当它们不是事件数据的根或什至彼此叠加时,它真的会帮助我!

【问题讨论】:

标签: wso2 wso2cep


【解决方案1】:

您可以使用 Siddhi 地图扩展来提取这些子元素[1]。在执行计划中,您可以使用地图扩展的 map:createFromJSON(documents) 函数(根据您的流对应的属性是文档)来创建地图。然后从它们的键中提取相应的值。(word、excel等)请参考[1]。如果要从上述流中输出三个事件,则必须编写自定义 StreamProcessor。请参考[2]。

[1]https://docs.wso2.com/display/CEP410/Siddhi+Extensions#SiddhiExtensions-map

[2]https://docs.wso2.com/display/CEP410/Writing+a+Custom+Stream+Processor+Extension

【讨论】:

  • 您好 dnWick,感谢您的回复。虽然我看不到 Siddhi 内部的任何东西如何解决我的问题......在我的接收器中,我有一个数组:“文档”JSON 字段。在接收器和任何执行计划(siddhi)之间,我需要使用一个流,而我的核心问题正是:如果流字段只能是基本类型(int , bool, string 等) ?
  • 目前还没有,恐怕......我们正在考虑简化活动内容......但如果 CEP 能够适应系统而不是其他方式会更好。
【解决方案2】:

如果我们以更通用的方式考虑事情,我想知道如何处理 Json 数据,因为没有对象类型,也没有流属性中的数组...

也许我这里的问题比我的问题中可能出现的要广泛......

问题是,我只是不明白如何以正确的方式处理复杂的 JSON 输入数据...我在 WSO2 文档或其他任何地方都找不到有关此的任何内容...

如果我错了,请告诉我,但我的看法是,如果我必须处理如下所示的输入 JSON 数据,如果没有严重的钩子和丑陋的解决方法,这将非常困难,甚至是不可能的。 .

{ "参考": "tiers1", “电子邮件收件人”:{ “到”:[“john.paeuudey@domain.com”], “碳复制”:[], “blindCarbonCopy”:[] } }

在上面的示例中,例如,我如何在流中存储“to”和“carbonCopy”数组的内容?如果我使用字符串属性,那么数组会在属性中序列化。这几乎是可用的,但是当在发布者中编写这些属性时,被视为字符串,例如,如果指定了 JSON,CEP 会在它们周围添加一些引号。 这只是许多问题的一方面......

所以,我的问题毕竟是,WSO2 CEP 是否甚至设计用于管理如此复杂的 JSON 数据?因为我真的觉得不是……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    相关资源
    最近更新 更多