Запись в объект CSV в массив Mulesoft

У меня есть этот вывод, и я пытаюсь изменить формат данных для ГГГГ-ММ-ДД, и я хотел бы записать этот объект в CSV, используя компонент File WRITE.

%dw 2.0
output application/json
---
{
    "id": "15",
    "key": "DEMO-123",
    "first": {
        "date": "2022-02-08T14:40:35.935+0100" as
         DateTime {format: "yyyy-MM-dd'T'HH:mm:ss.sssxx"} as String {format: "yyyy-MM-dd"},
        "demotype": {
            "firstname": "Task",
            "opinion": "demo input"
        },
        "demo": {
            "name": "Tree"
        },
        "start": "2022-02-08T07:23:53.054+0100",
        "end": "2022-02-08T14:40:35.935+0100",
        "status": {
            "name": "good"
        }
       "demo2": [
            {
                "kiss": [
                    "demo1"
                ]
            }
}

Я пытался сделать карту примерно так:

<ee:transform doc:name = "Transform Message">
            <ee:message>
                <ee:set-payload><![CDATA[%dw 2.0
output application/csv quoteValues=true, separator = ";", header=true

---
flatten (
    [
        "id": "id",
        "key": "key"
    ]
)]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <file:write doc:name = "Write" config-ref = "File_Config" path = "F:user/demo.csv"/>

Но я получил в CSV только идентификатор заголовков и ключ без значения. Но если я пытаюсь использовать карту, возникает ошибка, из-за которой мне нужно преобразовать этот объект в массив, чтобы записать его в CSV.

То, что у вас есть в первом DataWeave, является входом для преобразования для получения ожидаемого результата CSV. Покажите пример ожидаемого результата в формате CSV.

aled 21.03.2022 22:02
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш первый сценарий, который генерирует «входные данные» для преобразования в CSV, недействителен, а шаблон даты и времени недействителен. Я починил это. Я также установил вывод в application/java, чтобы быть более эффективным в следующем преобразовании:

%dw 2.0
output application/java
---
{
    "id": "15",
    "key": "DEMO-123",
    "first": {
        "date": "2022-02-08T14:40:35.935+0100" as
         DateTime {format: "yyyy-MM-dd'T'HH:mm:ss.SSSxx"} as String {format: "yyyy-MM-dd"},
        "demotype": {
            "firstname": "Task",
            "opinion": "demo input"
        },
        "demo": {
            "name": "Tree"
        },
        "start": "2022-02-08T07:23:53.054+0100",
        "end": "2022-02-08T14:40:35.935+0100",
        "status": {
            "name": "good"
        },
       "demo2": [
            {
                "kiss": [
                    "demo1"
                ]
            }
       ]
    }
}

Чтобы сгенерировать вывод CSV, вход должен быть массивом объектов, где каждый объект представляет собой запись или строку CSV. Поскольку вы вводите, по-видимому, один объект, вы можете просто заключить преобразование между скобками массива, чтобы вывести один массив элементов. Вы можете использовать следующий пример в качестве основы для выполнения желаемого преобразования. Обратите внимание, что demo2 содержит массив, который содержит объект с другим массивом. Вы не можете просто вывести это в поле CSV. Если вы хотите сделать это, сначала преобразуйте его в строку. Например, вы можете использовать функцию reduce(), если это необходимо.

%dw 2.0
output application/csv quoteValues=true, separator = ";", header=true
---
[
    {
        id: payload.id,
        key: payload.key,
        date: payload.first.date,
        start: payload.first.start
    }
]

Выход:

id;key;date;start
"15";"DEMO-123";"2022-02-08";"2022-02-08T07:23:53.054+0100"

Обратите внимание, что flatten() ничего не делает с простым массивом. Если вы пытались использовать его для «плоского» вложенного объекта/массива, имейте в виду, что он этого не делает.

Спасибо, это работает! Я использую reduce() и все записываю в CSV.

Anonim 22.03.2022 10:45

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