如果Dataweave中只有一个结果,如何获取未命名的对象而不是数组

时间:2016-08-29 07:34:52

标签: mule dataweave

我们使用Dataweave进行转换,处理对象列表。我们得到了类似的json响应:

{"hotels": [{
    "name": "Hotel Oslo",
    "propertyCode": "12345",
    "currency": "NOK"
},
{
    "name": "Hotel Stockholm",
    "propertyCode": "12346",
    "currency": "SEK"
}]}

但是,在只有1个响应的情况下,我们希望得到以下响应:

{"name": "Hotel Stockholm",
"propertyCode": "12346",
"currency": "SEK"}

我们正在生成这样的回复:

{
hotels: payload.rows map ((row , indexOfRow) -> {
    name: row.content.companyName.content,
    propertyCode: row.content.propertyCode.content,
    currency: row.content.currencyCode.content
})}

我们应该把什么作为一个条件,以便在1个结果的情况下我们不会得到一个数组?

1 个答案:

答案 0 :(得分:0)

试试这个:

%dw 1.0
%output application/json
%function makeHotel(row) {
    name: row.name,
    propertyCode: row.propertyCode,
    currency: row.currency
}
---
{
  hotels: payload.rows map ((row , indexOfRow) -> makeHotel(row))
} when ((sizeOf payload.rows) != 1) 
otherwise makeHotel(payload.rows[0])

它将为空输入提供一个空数组,一个输入的简单对象和具有多个输入行的数组结构。

(出于测试目的,输入结构略有不同,但一般解决方案应该清楚。)