1

我有 json 响应,我需要在将其发送到目标系统之前将其分解为多个部分。

我正在尝试 for-each 但无法达到我想要的输出。

输入json看起来像这样

{
    parent :
    {
        child:
            [{
                a:[{},{},{},{}]
            }]  
    }
}

和 out 应该看起来像第 1 部分

{
    parent :
    {
        child:
            [{
                a:[{},{}]
            }]  
    }
}

第2部分

{
    parent :
    {
        child:
            [{
                a:[{},{}]
            }]  
    }
}

有人可以帮我吗?

4

1 回答 1

3

根据您的示例 json 很难判断它不是格式化的 json。

注意预期的输入/输出与我原来的答案不同,所以这是一个更新

但是,这可行并且可以根据您的实际输入进行调整。

首先,使用 foreach 迭代您的有效负载的集合部分(根据您的示例#[flatten(payload.parent.child.a)](但是这可能会改变,因为它不清楚“子”数组是否也将超过一个元素。)

你也没有提到你想如何分割它。根据您的示例,它适用于每 2 条记录。所以使用batchSize属性并将其设置为 2(将其更改为您的实际要求)。

然后您需要添加包装 json 元素,因为您将在 foreach 中丢失它:

  <foreach doc:name="For Each"  collection="#[flatten(payload.parent.child.a)]" batchSize="2">
            <ee:transform doc:name="Transform Message" doc:id="7b1cccb7-fcbb-41b3-a08f-bac5600df2f2" >
                <ee:message >
                    <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
    parent :
    {
        child:[
           a: payload
        ]
    }
}]]></ee:set-payload>
                </ee:message>
            </ee:transform>
            <logger level="ERROR" message="Split items here: #[payload]" />
        </foreach>

输出与您的新预期输出相匹配:

  Split items here: {
      "parent": {
    "child": [
      {
        "a": [
          {

          },
          {

          }
        ]
      }
    ]
  }
}

Split items here: {
  "parent": {
"child": [
  {
    "a": [
      {

      },
      {

      }
    ]
  }
]

} }

于 2019-05-10T11:02:35.740 回答