Как разбить большой ответ Json на несколько Json в dataweave 2? - PullRequest
1 голос
/ 10 мая 2019

У меня есть ответ json, который нужно разбить на несколько частей перед отправкой в ​​целевую систему.

Я пытался использовать for-each, но не смог достичь желаемого результата.

Ввод JSON выглядит так

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

и должно выглядеть так часть1

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

часть2

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

Может кто-нибудь помочь мне здесь?

1 Ответ

3 голосов
/ 10 мая 2019

Трудно сказать, исходя из вашего образца json, поскольку он не отформатирован как json.

ПРИМЕЧАНИЕ Ожидаемый ввод / вывод изменился по сравнению с моим исходным ответом, поэтому это обновление

Однако, это работает и может быть настроено в зависимости от вашего фактического ввода.

Во-первых, используйте foreach для итерации части сбора вашей полезной нагрузки (в зависимости от вашего примера это #[flatten(payload.parent.child.a)] (но это может измениться какне ясно, если массив 'child' также будет содержать более одного элемента.)

Вы также не упоминаете, как хотите разделить его. На основе вашего примера, это для каждых 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": [
      {

      },
      {

      }
    ]
  }
]

}}

...