Как преобразовать входной массив JSON в CSV в муле - PullRequest
0 голосов
/ 09 июля 2019

это мой вход Json

[
{
    "id":"001",
    "name":"john",
    "gender": "M"
},
{
    "id":"002",
    "name":"Mule",
    "gender": "F"
},
{
    "id":"003",
    "name":"Sara",
    "gender": "F"
},
{
    "id":"004",
    "name":"Mati",
    "gender": "F"
}
]

Мне нужно сгенерировать этот вывод

gender:F**|**Mati*004**|**Sara*003**|**
gender:M**|**john*001**|**Mule*002**|**

1 Ответ

1 голос
/ 09 июля 2019

Я должен сказать, что вывод не выглядит стандартным CSV. Сказав это, можно достичь желаемого результата в DataWeave. Я предполагаю, что ваш вывод неверен, потому что запись "Mule" сгруппирована как Male.

Мне понадобилось несколько шагов, чтобы добиться результата. Сначала сгруппируйте записи по полу, используя groupBy (). Затем с помощью pluck () создайте массив с выводом groupBy (), чтобы иметь возможность отобразить его. Затем с помощью Reduce создайте строку в одну строку для каждой группы. Возможно, есть более простой способ получить тот же результат, однако ожидаемый результат не является естественным для формата CSV, поэтому все должно быть сделано вручную. Если возможно, я бы предложил использовать более простой формат вывода.

Это результирующий скрипт:

%dw 2.0
output application/csv header=false
---
(payload groupBy (item) -> item.gender  )
     pluck ((value, key, index) -> {
        k: key,
        v: value
     }
    ) map ((it, in) -> {
        record: "gender:" ++ it.k  ++ (it.v reduce ((person, acc="") -> acc ++ "**|**" ++ person.name ++ "*" ++ person.id) ++  "**|**")
    }
)

Что дает этот вывод для вашего ввода:

gender:M**|**john*001**|**
gender:F**|**Mule*002**|**Sara*003**|**Mati*004**|**
...