Dataweave错误:您使用字符串和数组调用了函数++(详情如下)



我正在使用mule 4.4社区版,我的要求是将JSON有效负载转换为管道分隔的数据,需要写入文件

传入的JSON有效负载如下所示:

{
"inputBy": "Bill",
"college": {
"id": 21,
"name": "Assisi Centre of Excellence",
"contact": {
"name": "John Doe",
"phone": "123456789",
"email": "john@doe.com"
}
},
"students": [
{
"studentId": 1,
"name": "Jim",
"age": 19,
"year": 12
},
{
"studentId": 2,
"name": "Mark",
"age": 18,
"year": 11
}
]
}

然后我需要将其转换为管道分隔的数据,如下所示:

Header|Bill|21|Assisi Centre of Excellence|John Doe|123456789|john@doe.com|||
Data|1|Jim|19|12
Data|2|Mark|18|11

从JSON中,学生数据是一个数组,需要在文件中作为详细信息,而JSON的其余部分需要作为文件(头)的第一行

为了实现这一点,我试图定义一个变量,其中使用简单的连接,我分别创建头。

<set-variable value='#["Header|" ++ payload.inputBy ++ "|" ++ payload.college.id ++ "|" ++ payload.college.name ++ "|" ++ payload.college.contact.name ++ "|" ++ payload.college.contact.phone ++ "|" ++ payload.college.contact.email ++ "|||" ]' doc:name="Set emp Header" variableName="myHdr"/>

那么变量myHdr的值是:

Header|Bill|21|Assisi Centre of Excellence|John Doe|123456789|john@doe.com|||

然后在一个单独的组件(setPayload)中遍历'student'数组

<set-payload value='#[%dw 2.0
&#10;output application/csv header=false, separator="|"
&#10;---
&#10;payload.students]' doc:name="Transform emp data"  />

生成以下有效负载:

1|Jim|19|12
2|Mark|18|11

现在我有一个变量标题数据:myHdr和实际的学生数据在payload

在将此写入文件之前,我正在考虑将两者拼接在一起,因此尝试在日志记录器中完成:

<logger level="INFO" doc:name="Logger" category="test" message="#[vars.myHdr ++ payload]"/>

现在我得到了错误:

"你用这些参数调用函数'++':1:字符串…2:数组[{

]但是它期望下列组合之一:(Array, Array) (String,字符串)

所以我假设Dataweave是抱怨,因为头数据是一个字符串,而有效载荷是一个数组我需要将有效载荷(数组)转换为字符串吗?我该怎么做呢?

输出CSV, JSON或XMl,然后尝试将其连接为字符串,这不是一种好方法。最好使用本机表示(Java)来构建结构并以所需的最终格式输出。

将头文件构造为具有任意键的对象,其值是头文件的名称。将该对象放入数组中,然后连接数据数组。然后,您可以将完整的数组输出为CSV,禁用自动标头。

的例子:

%dw 2.0
output application/csv header=false, separator="|"
var headers=[{
h1: "Header",
h2: payload.inputBy,
h3: payload.college.id,
h4: payload.college.name,
h5: payload.college.contact.name,
h6: payload.college.contact.phone,
h7: payload.college.contact.email,
h8: "",
h9: "",
h10: ""
}]
---
headers ++ payload.students
输出:

Header|Bill|21|Assisi Centre of Excellence|John Doe|123456789|john@doe.com|||
1|Jim|19|12
2|Mark|18|11

最新更新