簡體   English   中英

在M子中使用Dataweave讀取數組值

[英]Read Array Value Using Dataweave in Mule

我試圖在Mule中使用dataweave從傳入的有效負載中讀取特定的數據值。 我的有效負載示例如下所示:

 {
    "source": [
        {
            "uri": "entities/1R6xV",
            "createdBy": "API_USER",
            "createdTime": 1562504739146,
            "attributes": {
                "label": "000000000002659654",
                "value": {
                    "Name": [
                        {
                        }
                    ],
                    "Id": [
                        {
                        }
                    ],
                    "Number": [
                        {
                            "type": "config/Types/Number/attributes/Number",
                            "ov": true,
                            "value": "000000000002659654",
                            "uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
                        }
                    ]
                }
            }
        }
    ]
}

如果我需要閱讀“標簽”,可以通過以下方式實現

label: payload.source.attributes.label

同樣,如何讀取屬性>數字下的“值”。 它不適用於:

Value: payload.source.attributes.Number.value

我是Dataweave的新手。 請指教。

問題是點選擇器(。)適用於對象和對象數組。 當將其應用於數組時,會將點選擇器應用於該數組所有屬於object類型的元素,並返回該結果。

讓我們分開

payload.source

返回

[
  {
    "uri": "entities/1R6xV",
    "createdBy": "API_USER",
    "createdTime": 1562504739146,
    "attributes": {
      "label": "000000000002659654",
      "value": {
        "Name": [
          {

          }
        ],
        "Id": [
          {

          }
        ],
        "Number": [
          {
            "type": "config/Types/Number/attributes/Number",
            "ov": true,
            "value": "000000000002659654",
            "uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
          }
        ]
      }
    }
  }
]

到目前為止,有效負載是一個對象,它返回的是數組的source的值

payload.source.attributes

返回

[
  {
    "label": "000000000002659654",
    "value": {
      "Name": [
        {

        }
      ],
      "Id": [
        {

        }
      ],
      "Number": [
        {
          "type": "config/Types/Number/attributes/Number",
          "ov": true,
          "value": "000000000002659654",
          "uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
        }
      ]
    }
  }
]

之所以可以正常工作,是因為payload.source的結果以對象數組結尾,因此它將對那些對象進行選擇。

現在,當您執行

payload.source.attributes.value.Number

它返回

[
  [
    {
      "type": "config/Types/Number/attributes/Number",
      "ov": true,
      "value": "000000000002659654",
      "uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
    }
  ]
]

那是一個數組的數組,在這里是壞掉的。

我的解決方案

您在這里有兩種選擇

  • 使用展平功能

    弄平(payload.source.attributes.value.Number)。價值

  • 使用后代選擇器

    payload.source.attributes.value.Number..value

由於Number是一個數組,因此需要指定所需的索引。 在這種情況下,第零個元素:

Value: payload.source[0].attributes.value.Number[0].value

如果您有多個數字,它將看起來像這樣:

%dw 1.0
%output application/json
---
values: payload.source[0].attributes.value.Number map {
    value: $.value
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM