繁体   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