У меня есть этот вывод, и я пытаюсь изменить формат данных для ГГГГ-ММ-ДД, и я хотел бы записать этот объект в 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.
Ваш первый сценарий, который генерирует «входные данные» для преобразования в 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.
То, что у вас есть в первом DataWeave, является входом для преобразования для получения ожидаемого результата CSV. Покажите пример ожидаемого результата в формате CSV.