J'ai une demande de tableau comme ci-dessous. Il pourrait avoir plusieurs objets shipping comme indiqué ci-dessous. Dans la requête, 2e objets "shipping" ayant deux Header et deux Details.

Ici, le 1er en-tête doit se joindre au 1er détails pour créer des objets Shipping distincts et le 2e Header doit se joindre au 2e Details pour créer des objets Shipping distincts et vice versa car il a chances d'avoir plus d'en-têtes et de détails.

Remarque : Si header est présent, il y aura toujours un details correspondant qui sera présent de la même manière.

La demande et la réponse attendue sont ci-dessous. Mule Runtime 4.2.2

Toute idée de la façon dont il peut être réorganisé, toute idée de solution sera très appréciée. Merci.

Demande:

[
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "61",
        "ShippingDate": "10/08/1988",
        "Address1": ""
      },
      "Details": {
        "SerialNo": "61",
        "LineNo": "1",
        "Description": "Shipping Details"
      }
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "21/08/2021",
        "Address": "Test1Address"
      },
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "22/05/1977",
        "Address1": "Test2Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test1"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test2"
      }
    }
  }]

Réponse attendue

[
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "61",
        "ShippingDate": "10/08/1988",
        "Address1": ""
      },
      "Details": {
        "SerialNo": "61",
        "LineNo": "1",
        "Description": "Shipping Details"
      }
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "21/08/2021",
        "Address": "Test1Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test1"
      }
      
    }
  },
  {
    "Shipping": {
      "Header": {
        "Identifier": "100",
        "SerialNo": "62",
        "ShippingDate": "22/05/1977",
        "Address1": "Test2Address"
      },
      "Details": {
        "SerialNo": "62",
        "LineNo": "1",
        "Description": "Test2"
      }
    }
  }]

J'espère que ma question s'éclaircit. Faites-moi savoir si nécessite plus de précisions.

0
star 15 sept. 2020 à 13:39

1 réponse

Meilleure réponse

Dans ce script, j'ai essayé d'expulser le remappage champ par champ en réutilisant les objets d'origine.

payload reduce ((shipping, acc=[]) -> 
    acc ++ (
        shipping.Shipping.*Details map ((detail, index) -> 
            {
                Shipping: { 
                    Header: shipping.Shipping.*Header[index],
                    Details:  shipping.Shipping.*Details[index] 
                }
            }
        )
    )
)

Vous pouvez mapper en utilisant *Details ou *Header qui devrait produire la même sortie

MODIFIÉ : la logique d'en-tête était manquante et l'expédition n'a pas d'autre contenu que l'en-tête et les détails

2
Jorge Garcia 15 sept. 2020 à 13:18