如何使用 JBoss Fuse(骆驼)将 JSON 解组为多个项目?
How to unmarshal JSON to multiple items with JBoss Fuse (camel)?
我目前有以下简化的 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}
如何将所有项目都放入映射中?
您尝试解析的 JSON 不是有效的 JSON。如果您可以控制发送给 Camel 的内容,请尝试将其包装在一个数组中,如下所示:
[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]
这将为您提供一组对象并且应该正确解析。
如果您无法控制输入,也可以在 unmarshal()
调用
之前添加数组标记作为 Camel 处理的一部分
如果你想得到所有的,然后把它们放到一个数组中,比如
[{"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 (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}
如何将所有项目都放入映射中?
您尝试解析的 JSON 不是有效的 JSON。如果您可以控制发送给 Camel 的内容,请尝试将其包装在一个数组中,如下所示:
[{"type":"monkey","food":"banana"},{"type":"dog","food":"bone"},{"type":"cat","food":"fish"}]
这将为您提供一组对象并且应该正确解析。
如果您无法控制输入,也可以在 unmarshal()
调用
如果你想得到所有的,然后把它们放到一个数组中,比如
[{"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}]