0

这是我的 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**|**
4

1 回答 1

1

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

我需要几个步骤来实现结果。首先使用 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**|**
于 2019-07-09T17:40:46.727 回答