如何在input子中将输入的json数组转换为csv

时间:2019-07-09 11:50:32

标签: dataweave mulesoft

这是我的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 个答案:

答案 0 :(得分:1)

我不得不说输出看起来不是标准的CSV。话虽如此,有可能在DataWeave中实现所需的输出。我假设您的输出不正确,因为“ M子”记录被分组为“男性”。

我需要几个步骤来达到目的。首先使用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**|**