除非明确地重新映射,否则那将不太奏效。您必须从上到下考虑文档的整个结构。它不是字符串序列 - 它是顶级的 JSON 对象/字典,其值是字符串序列的序列。
JSON 对象/字典可以根据字段名称映射到事件类型。所以正如马特的回答所说,像你这样的 JSON 文档需要一个像这样的事件类型
event SomeEventType {
sequence<sequence<string > > test2;
}
如果创建与 JSON 文档结构完全对应的事件类型不合适,则需要使用映射编解码器重新排列 JSON 文档中的字段以匹配事件类型中的字段和子字段。或者可能是自定义编解码器;我认为马特是对的,映射器不能完全按照您的意愿行事。
此外,由于 JSON 文档在顶层是无类型的,因此您需要确保以某种方式定义了事件类型。有多种方法可以做到这一点。
(1) 如果此特定连接只会向您发送一种类型的事件,您可以使用链顶部 apama.eventMap 主机插件的“defaultEventType”配置选项,例如
apama.eventMap:
defaultEventMap: SomeEventType
(2) 如果它取决于文档的结构,则需要使用分类器编解码器。这可以将消息发送给相关器,并根据字段的内容(或只是它们的存在)为其分配事件类型。您可以在文档中了解它。
(3) 传输有时会在发送给相关器的消息上定义它。例如,在通用消息传输的情况下,UM 事件的“标签”将用作类型。这可能合适,也可能不合适。
如果您最终对分类器或映射器做了任何不重要的事情,我强烈建议您使用“诊断编解码器”来帮助开发分类器或映射器规则。这是一个编解码器,您可以将其放在编解码器链中的任何位置,该编解码器将记录通过它的每个事件,因此您可以通过查看分类/映射之前和之后发生的情况来了解您的规则是如何运行的。您可以在文档中阅读有关它的信息,但通常只需将“- diagnosticCodec”放在您的链中某处即可。在调试连接链时,我发现它绝对是无价的。