首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Mule中的数据编织读取数组值

用Mule中的数据编织读取数组值
EN

Stack Overflow用户
提问于 2019-07-10 14:00:14
回答 2查看 2.8K关注 0票数 2

我试图使用Mule中的数据编织从传入的有效负载中读取特定的数据值。我的有效载荷如下所示:

代码语言:javascript
复制
 {
    "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"
                        }
                    ]
                }
            }
        }
    ]
}

如果我需要阅读“标签”,我可以通过

代码语言:javascript
复制
label: payload.source.attributes.label

类似地,我如何读取属性>数字下的“值”。它不起作用的是:

代码语言:javascript
复制
Value: payload.source.attributes.Number.value

我是数据编织的新手。请给我建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-10 15:02:00

问题是点选择器(.)在对象和对象数组上工作。当它应用于数组时,它将将点选择器应用于数组中所有类型为object的元素,并返回结果。

让我们一分为二

代码语言:javascript
复制
payload.source

返回

代码语言:javascript
复制
[
  {
    "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"
          }
        ]
      }
    }
  }
]

到目前为止,作为一个对象,它返回作为数组的源的值。

代码语言:javascript
复制
payload.source.attributes

返回

代码语言:javascript
复制
[
  {
    "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的结果以对象数组结尾,所以它将对这些对象进行选择。

现在当你执行

代码语言:javascript
复制
payload.source.attributes.value.Number

它回来了

代码语言:javascript
复制
[
  [
    {
      "type": "config/Types/Number/attributes/Number",
      "ov": true,
      "value": "000000000002659654",
      "uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
    }
  ]
]

这是一个数组,这里是它被破坏的地方。

我的解决方案

你这里有两种选择

  • 使用平坦函数 flatten(payload.source.attributes.value.Number).value
  • 使用后代选择器 payload.source.attributes.value.Number..value
票数 2
EN

Stack Overflow用户

发布于 2019-07-10 14:25:28

由于数字是一个数组,所以需要指定所需的索引。在本例中,zeroth元素:

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

如果您有多个数字,它将如下所示:

代码语言:javascript
复制
%dw 1.0
%output application/json
---
values: payload.source[0].attributes.value.Number map {
    value: $.value
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56972384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档