如何使用JBoss Fuse(camel)将JSON解组为多个项目?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JBoss Fuse(camel)将JSON解组为多个项目?相关的知识,希望对你有一定的参考价值。

我目前有以下简化的JSON(test.json):

{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}

执行以下操作:

from("file:/tmp/input").routeId("test")
                        .unmarshal().json(JsonLibrary.Jackson)
                        .log("After unmarshall:\n ${body}");

将JSON文件放入输入文件夹时,我只得到以下映射:

{type=monkey, food=banana}

如何将所有项目都放入映射中?

答案

如果你想得到所有,然后把它们放到像这样的数组

[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]

然后使用useList选项设置dataFormat。在我试过的Xml DSL中

<dataFormats>
  <json id="json" library="Jackson"  useList="true"/>
</dataFormats>

在Java中

JacksonDataFormat json = new JacksonDataFormat(); 
json.useList();

然后使用unmarshall与前面的数据格式

XML DSL:

<unmarshal ref="json"/>

所以你应该:

from("file:/tmp/input").routeId("test")
                        .unmarshal().json(json)
                        .log("After unmarshall:\n ${body}");

输出是一个列表:

 [{type=monkey, food=banana}, {type=dog, food=bone}, {type=cat, food=fish}]
另一答案

您尝试解析的JSON不是有效的JSON。如果您可以控制发送给Camel的内容,请尝试将其包装在数组中,如下所示:

[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]

这将为您提供一个对象数组,并应正确解析。

如果你无法控制输入,你也可以在unmarshal()调用之前添加数组标记作为Camel处理的一部分

以上是关于如何使用JBoss Fuse(camel)将JSON解组为多个项目?的主要内容,如果未能解决你的问题,请参考以下文章

使用servlet传输Jboss fuse 6.3公开https camel cxf webservice

使用 servlet 传输 Jboss fuse 6.3 公开 https camel cxf webservice

JBoss Fuse - 如何使用不同的 CXF 版本

将jml的子记录拆分为jboss fuse中activeMQ中的各个消息

pax-jdbc PostgreSQL JBoss Fuse

通告红帽JBoss Fuse及JBoss A-MQ所用Karaf远程代码执行漏洞 安全威胁