问题描述
我有一个XML文件,该文件通过TRANSFORM MESSAGE转换为JSON对象:
%dw 2.0
output application/json
---
payload
生成的JSON对象的格式为:
{
"Items": {
"Item": {
"ItemId": "123","OrganizationId": "456","OrganizationCode": "ABC",
其中有一个“项目”和112个“项目”。我想要返回一个包含所有ItemIds的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",},"Item": {
"ItemId": "8050","Item": {
"ItemId": "3801",}
}
}
输出应为:[“ 8041”,“ 8050”,“ 3801”]。解析Item元素,提取ItemID值并创建一个JSON数组。
解决方法
您的脚本运行良好。让我提到,从XML转换为JSON的第一个转换会适得其反。下一个转换将必须解析JSON以发出JSON。从XML到JSON,最好一步完成。如果您需要中间结果来进行其他处理,最好转换为Java(application / java)处理,然后在需要最终输出时再转换为最终JSON格式。用XML或JSON处理中间步骤只会消耗更多资源。
基于此,我使用了以下XML输入:
<Items>
<Item>
<ItemId>8041</ItemId>
<OrganizationId>12</OrganizationId>
<OrganizationCode>ABC</OrganizationCode>
</Item>
<Item>
<ItemId>8050</ItemId>
<OrganizationId>12</OrganizationId>
<OrganizationCode>ABC</OrganizationCode>
</Item>
<Item>
<ItemId>3801</ItemId>
<OrganizationId>12</OrganizationId>
<OrganizationCode>ABC</OrganizationCode>
</Item>
</Items>
脚本:
%dw 2.0
output application/json
---
payload.Items.*Item map (item,index) -> item.ItemId
输出:
[
"8041","8050","3801"
]
相同的脚本也可以与您的JSON输入配合使用。