[英]Apache Camel (JBoss Fuse) - how to unzip a file from a MQ route?
[英]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}
如何將所有項目都放入映射中?
如果你想得到所有,然后把它們放到像這樣的數組
[{"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處理的一部分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.