Как получить безымянный объект вместо массива в случае только одного результата в 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])

Он даст вам пустой массив на пустом вводе, простой объект для одного ввода и структуру с массивом, когда у вас более одной входной строки.

(Для целей тестирования, с немного отличающейся структурой ввода, но общее решение должно быть ясным.)

Другие вопросы по тегам