如何使用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
将jml的子记录拆分为jboss fuse中activeMQ中的各个消息