json - 将 JSON 映射到 Apama 事件

标签 json apama

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

{"test2":[
    ["column1","column2","column3"],
    ["16091", "449", "05302018"],
    ["16092", "705", "05302018"]
]}

到 EPL 类型。对我来说它看起来像一个序列序列,所以我使用了

event test1 {
    sequence<string> values;
}

event test2 {
    sequence<test1> tests;
}

但这给了我错误

Unable to parse event test.1: Incorrect type in get (you asked for map but its' actually list) 

有什么想法我应该如何使用 Mapper 编解码器吗?

最佳答案

除非明确地重新映射,否则不会完全有效。您必须从上到下考虑文档的整个结构。它不是字符串序列 - 它是顶层的 JSON 对象/字典,其值是字符串序列的序列。

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

event SomeEventType {
    sequence<sequence<string > > test2;
}

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

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

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

apama.eventMap:
    defaultEventMap: SomeEventType

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

(3) 传输有时会在发送到相关器的消息上定义它。例如,在通用消息传输的情况下,UM 事件的“标签”将用作类型。这可能合适也可能不合适。

如果您最终对分类器或映射器做了任何重要的事情,我强烈建议您使用“诊断编解码器”来帮助开发分类器或映射器规则。这是一个编解码器,您可以将其放置在编解码器链中的任何位置,它将记录通过它的每个事件,因此您可以通过查看分类/映射之前和之后发生的事情来了解您的规则是如何运作的。您可以在文档中阅读它,但它通常就像将“-diagnosticCodec”放在链中的某个位置一样简单。在调试连接链时,我发现它绝对无价

关于json - 将 JSON 映射到 Apama 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53084274/

相关文章:

java - Spring + REST 的 Pretty-Print 参数

java - 为什么 DefaultJackson2JavaTypeMapper.toJavaType() 不支持抽象类和接口(interface)作为推断类型?

javascript - 使用 list.js 排序/搜索时列表项消失

events - 如何让多个上下文处理 Apama 中的事件

apama - 如何使用 PySys 测试 Apama 相关器

c# - 整个类型的 Json.NET 条件序列化

python - 随机 json.decoder.JSONDecodeError : Expecting value: line 1 column 1 (char 0)

阿帕玛 10.3 : Add pysys nature to projects

apama - 如何解析 HTTP JSON 响应负载中的值

docker - HelloWorld Apama Docker 应用程序