Return 个 JSON 对象的元素作为数组

Return elements of a JSON object as an array

我有一个 XML 文件,它通过 TRANSFORM MESSAGE 转换为 JSON 对象:

%dw 2.0
output application/json
---
payload

生成的 JSON 对象的格式为:

{
  "Items": {
    "Item": {
      "ItemId": "123",
      "OrganizationId": "456",
      "OrganizationCode": "ABC",

其中有 1 个“Items”和 112 个“Item”。我想要的是 return 一个包含所有 ItemId 的 JSON 数组。我正在尝试在 FOREACH 中使用 TRANSFORM MESSAGE。 FOREACH 在集合字段中有 'payload',TRANSFORM MESSAGE 有:

%dw 2.0
output application/json
---
myItems: payload.items.*item map (item, index) -> {
    "myItemId" : item.ItemId
}

但是,它总是 return 包含所有内容,整个 JSON 对象。我不知道是我的 FOREACH 错误还是我的 TRANSFORM MESSAGE 错误,但它总是 return 整个 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 转换为 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 输入。