【发布时间】:2020-09-08 14:12:18
【问题描述】:
我有一个通过 TRANSFORM MESSAGE 转换为 JSON 对象的 XML 文件:
%dw 2.0
output application/json
---
payload
生成的 JSON 对象的格式为:
{
"Items": {
"Item": {
"ItemId": "123",
"OrganizationId": "456",
"OrganizationCode": "ABC",
其中有 1 个“项目”和 112 个“项目”。我想要的是返回一个包含所有 ItemId 的 JSON 数组。我正在尝试在 FOREACH 中使用 TRANSFORM MESSAGE。 FOREACH 在收集字段中有“有效负载”,而 TRANSFORM MESSAGE 有:
%dw 2.0
output application/json
---
myItems: payload.items.*item map (item, index) -> {
"myItemId" : item.ItemId
}
但是,它总是返回所有内容,即整个 JSON 对象。我不知道我的 FOREACH 是错还是 TRANSFORM MESSAGE 错了,但它总是返回整个 JSON 对象。
传入的 JSON 示例如下:
{
"Items": {
"Item": {
"ItemId": "8041",
"OrganizationId": "12",
"OrganizationCode": "ABC",
},
"Item": {
"ItemId": "8050",
"OrganizationId": "12",
"OrganizationCode": "ABC",
},
"Item": {
"ItemId": "3801",
"OrganizationId": "12",
"OrganizationCode": "ABC",
}
}
}
输出应该是:["8041", "8050", "3801"]。解析 Item 元素,提取 ItemID 值并创建 JSON 数组。
【问题讨论】:
-
为了能够帮助您,请分享 XML 输入。请注意,DataWeave 中没有
foreach。你指的是map()函数。 -
它是 FOR EACH 模块。 map() 函数位于 FOR EACH 内的 TRANSFORM MESSAGE 中。但是,我刚刚被告知进入 FOR EACH 的有效载荷结构与出来的有效载荷结构完全相同。我必须将我正在创建的 JSON 数组分配给一个变量并使用 SET PAYLOAD 将变量发送出去。
-
为了获取在 FOR EACH 模块中创建的 JSON 数组,我是否必须在外部创建一个全局数组,然后将映射的输出分配给该变量?有人这样做的例子吗?
-
如果问题是关于 Foreach 范围的,您应该添加输入和包括 foreach 的 sn-p。但是,使用您共享的转换或类似的东西似乎更容易做到这一点。如果您分享输入和预期输出,我们可以试一试。
-
上面添加了一个例子。实际的 ITEM 元素很大(20K 行),但我想要的只是项目 ID。