簡體   English   中英

如何使用JBoss Fuse(camel)將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}

如何將所有項目都放入映射中?

如果你想得到所有,然后把它們放到像這樣的數組

[{"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM