首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON映射到Apama事件

将JSON映射到Apama事件
EN

Stack Overflow用户
提问于 2018-10-31 13:16:08
回答 2查看 230关注 0票数 3

我正在尝试使用连接链中的Mapper编解码器来转换如下所示的JSON对象:

代码语言:javascript
复制
{"test2":[
    ["column1","column2","column3"],
    ["16091", "449", "05302018"],
    ["16092", "705", "05302018"]
]}

一种EPL类型。在我看来,这是一系列的序列,所以我用

代码语言:javascript
复制
event test1 {
    sequence<string> values;
}

event test2 {
    sequence<test1> tests;
}

但这给了我错误

代码语言:javascript
复制
Unable to parse event test.1: Incorrect type in get (you asked for map but its' actually list) 

我该如何使用Mapper编解码器来达到这个目的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-31 13:47:37

除非显式地重新映射,否则这是行不通的。您必须从上到下考虑文档的整个结构。它不是一个字符串序列-它是一个顶级的JSON对象/字典,其值是一个字符串序列序列。

JSON对象/字典可以基于字段名映射到事件类型。因此,正如Matt的回答所述,像您这样的JSON文档需要一个事件类型,例如

代码语言:javascript
复制
event SomeEventType {
    sequence<sequence<string > > test2;
}

如果创建与JSON文档结构完全对应的事件类型不合适,则需要使用映射编解码器重新排列JSON文档中的字段,以匹配事件类型中的字段和子字段。或者可能是一个定制的编解码器;我认为Matt是对的,映射器不能完全按照您的要求来做。

此外,由于JSON文档在顶层没有类型,因此需要确保以某种方式定义了事件类型。有多种方法可以做到这一点。

(1)如果这种特定的连接只会向您发送一种类型的事件,则可以在链的顶端使用apama.eventMap主机插件的“apama.eventMap”配置选项。

代码语言:javascript
复制
apama.eventMap:
    defaultEventMap: SomeEventType

(2)如果它取决于文档的结构,则需要使用分类器编解码器。它可以接收一条通向相关器的消息,并根据字段的内容(或者仅仅是它们的存在)为其分配一个事件类型。您可以在文档中了解到这一点。

(3)传输有时会对发送给相关器的消息进行定义。例如,在通用消息传输的情况下,UM事件的‘标记’将用作类型。这样做可能合适,也可能不合适。

如果您最终使用分类器或映射器做了一些不平凡的事情,我强烈建议使用“诊断编解码器”来帮助开发分类器或映射规则。这是一个编解码器,你可以把它放在编解码链中的任何地方,这样你就可以通过查看分类/映射之前和之后发生的事情来查看你的规则是如何运行的。您可以在文档中阅读到它,但是它通常就像将'- diagnosticCodec‘放在链中的某个地方一样简单。在调试连接链时,我发现它是非常宝贵的。

票数 4
EN

Stack Overflow用户

发布于 2018-10-31 13:35:10

您希望您的事件类型看起来像:

代码语言:javascript
复制
event type1 {
   sequence<sequence<string> > data;
}

在映射程序中不可能直接转换为类型2/type1 1模式,但是您可以编写自己的编解码器来完成这一任务,或者在EPL中进行后期过滤。

麦特

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53084274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档