Как сопоставить данные в массиве с выходом другого массива с другим индексом в Mule Dataweave - PullRequest
1 голос
/ 21 июня 2019

У меня есть такой JSON:

{
"invoice-line": [
    {
        "id": "01",
        "date": "2019-06-21",
        "sales-date": "2019-06-21",
        "line-num": "1",
        "item": "Mouse",
        "descrption": "This is line 1 item"
    },
    {
        "id": "02",
        "date": "2019-06-21",
        "sales-date": "2019-06-21",
        "line-num": "2",
        "item": "Keyboard",
        "descrption": "This is line 2 item"
    },
    {
        "id": "03",
        "date": "2019-06-21",
        "sales-date": "2019-06-21",
        "line-num": "3",
        "item": "Monitor",
        "descrption": "This is line 3 item"
    }
]
}

Из этого входного JSON нам нужно извлечь данные и отобразить в другой выходной JSON, но с логикой:
когда номер строки = 1, тогда идентификатор карты, дата, дата продажи, описание затем rest или массив отобразит id, item, descrption
Который будет выглядеть ниже:

{
"row": [
    {
        "id": "01",
        "date": "2019-06-21",
        "sales-date": "2019-06-21",
        "line-num": "1",
        "item": "",
        "descrption": "This is line 1 item"
    },
    {
        "id": "02",
        "date": "",
        "sales-date": "",
        "line-num": "",
        "item": "Mouse",
        "descrption": "This is line 2 item"
    },
    {
        "id": "03",
        "date": "",
        "sales-date": "",
        "line-num": "",
        "item": "Monitor",
        "descrption": "This is line 3 item"
    }
]
}

Также возможно ли выполнить что-то вроде отображения элемента массива (первый индекс) в другой выходной массив? Например:

{
"row": [
    {
        "id": "",
        "date": "2019-06-21",
        "sales-date": "2019-06-21",
        "line-num": "1",
        "item": "",
        "descrption": ""
    },
    {
        "id": "01",
        "date": "",
        "sales-date": "",
        "line-num": "",
        "item": "Keyboard",
        "descrption": "This is line 1 item"
    },
    {
        "id": "02",
        "date": "",
        "sales-date": "",
        "line-num": "",
        "item": "Mouse",
        "descrption": "This is line 2 item"
    },
    {
        "id": "03",
        "date": "",
        "sales-date": "",
        "line-num": "",
        "item": "Monitor",
        "descrption": "This is line 3 item"
    }
]
}

1 Ответ

1 голос
/ 21 июня 2019

Надеюсь, это то, что вы искали:

%dw 1.0
%output application/json
---
row: 
    (payload.invoice-line filter ($.line-num == '1') map {
            id: "",
            date: $.date,
            sales-date: $.sales-date,
            line-num: $.line-num,
            item: "",
            descrption: ""
        })
    ++
    (payload.invoice-line map {
            id: $.id,
            date: "",
            sales-date: "",
            line-num: "",
            item: $.item,
            descrption: $.descrption
    })

производит:

{
    "row": [
        {
            "id": "",
            "date": "2019-06-21",
            "sales-date": "2019-06-21",
            "line-num": "1",
            "item": "",
            "descrption": ""
        },
        {
            "id": "01",
            "date": "",
            "sales-date": "",
            "line-num": "",
            "item": "Mouse",
            "descrption": "This is line 1 item"
        },
        {
            "id": "02",
            "date": "",
            "sales-date": "",
            "line-num": "",
            "item": "Keyboard",
            "descrption": "This is line 2 item"
        },
        {
            "id": "03",
            "date": "",
            "sales-date": "",
            "line-num": "",
            "item": "Monitor",
            "descrption": "This is line 3 item"
        }
    ]
}
...