Как получить безымянный объект вместо массива в случае только одного результата в Dataweave
У нас есть преобразование с Dataweave, которое обрабатывает список объектов. Мы получаем ответ JSON, как это:
{"hotels": [{
"name": "Hotel Oslo",
"propertyCode": "12345",
"currency": "NOK"
},
{
"name": "Hotel Stockholm",
"propertyCode": "12346",
"currency": "SEK"
}]}
Однако в случае только одного ответа мы хотим получить следующий ответ:
{"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 ответ
Попробуй это:
%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])
Он даст вам пустой массив на пустом вводе, простой объект для одного ввода и структуру с массивом, когда у вас более одной входной строки.
(Для целей тестирования, с немного отличающейся структурой ввода, но общее решение должно быть ясным.)