遍历数组并为每个元素生成一个新变量

Iterate through the array and generate a new variable for each element

我有一个 JSON 数组存储在一个变量中,如下所示

{
  "Opportunity": {
    "QuoteLineItems": {
      "QuoteLineItem": {
        "ServiceTypeCode": "CC",
        "PhaseLevel": "1",
        "Quantity": "1",
        "UnitPrice": "2,854.50",
        "InvoicedSinceLast": "0.00",
        "LevelItems": {
          "LevelItem": {
            "PhaseLevelItemNumber": "R072",
            "DocumentNotes": {
              "Note": null
            }
          }
        },
        "Colonies": {
          "ColonyStage": {
            "QuoteColonyLineNumber": "1",
            "StageItems": {
              "StageItem": {
                "StageLineProperty": "CHARGE",
                "StageQuoteItemNumber": "ICM_033",
                "DocumentNotes": {
                  "Note": null
                }
              }
              }
            }
          }
        }
      },
      "QuoteLineItem": {

我需要遍历每个 QuoteLineItem 并为每个 Item 生成一个新的 json 变量,因此我使用如下所示的 For each 元素

在 For each 中,我有一个转换 Messgae 来生成一个新的 json,如下所示

%dw 2.0
output application/json
---
{
   "productCode" : //Not sure how to access the ServiceTypeCode on the QuoteLineItem 
   "axSequenceNumber" : vars.counter,
}

如何为每个循环内的转换消息中的每个 QuoteLineItem 获取 ServiceTypeCode。我是 Mulesoft 的新手,非常感谢任何帮助

QuoteLineItem 是对象,不是数组,所以不能用它来迭代。相反,您可以使用 multi-value selector 将所有匹配的键作为数组检索并使用它来迭代:

  <foreach doc:name="For Each" collection="#[payload.Opportunity.QuoteLineItems.*QuoteLineItem]">

在 foreach 中,您接收输入数组的每个元素作为有效负载:

%dw 2.0
output application/json
---
{
   "productCode" : payload.ServiceTypeCode
   "axSequenceNumber" : vars.counter
}

我不确定你试图通过将其存储到变量中来实现什么。您应该考虑单个转换是否可能无法达到相同的结果。