我目前有以下简化的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}
如何将所有项目都纳入映射?
答案 0 :(得分:3)
如果你想得到所有,那么把它们放到像
这样的数组中[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]
然后使用 useList 选项设置dataFormat为true。在我试过的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}]
答案 1 :(得分:0)
您尝试解析的JSON不是有效的JSON。如果您可以控制发送给Camel的内容,请尝试将其包装在一个数组中,如下所示:
[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]
这将为您提供一个对象数组,并且应该正确解析。
如果您无法控制输入,您也可以在unmarshal()
调用