在 Mule 中使用 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",我可以通过
实现
label: payload.source.attributes.label
同样,如何读取属性>数字下的"value"。它不适用于:
Value: payload.source.attributes.Number.value
我是 Dataweave 的新手。请指教
由于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
}
问题是点选择器 (.) 适用于对象和对象数组。当它应用于数组时,它将把点选择器应用于数组中所有类型为对象的元素,并且 return 结果。
让我们一步一步来
payload.source
Returns
[
{
"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"
}
]
}
}
}
]
到目前为止,有效载荷是一个对象,它return源的值是一个数组
payload.source.attributes
Returns
[
{
"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
它returns
[
[
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
]
这是一个数组数组,这里是它损坏的地方。
我的解决方案
这里有两个选择
使用展平函数
展平(payload.source.attributes.value.Number).value
使用后代选择器
payload.source.attributes.value.Number..value
我正在尝试在 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",我可以通过
实现label: payload.source.attributes.label
同样,如何读取属性>数字下的"value"。它不适用于:
Value: payload.source.attributes.Number.value
我是 Dataweave 的新手。请指教
由于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
}
问题是点选择器 (.) 适用于对象和对象数组。当它应用于数组时,它将把点选择器应用于数组中所有类型为对象的元素,并且 return 结果。
让我们一步一步来
payload.source
Returns
[
{
"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"
}
]
}
}
}
]
到目前为止,有效载荷是一个对象,它return源的值是一个数组
payload.source.attributes
Returns
[
{
"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
它returns
[
[
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
]
这是一个数组数组,这里是它损坏的地方。
我的解决方案
这里有两个选择
使用展平函数
展平(payload.source.attributes.value.Number).value
使用后代选择器
payload.source.attributes.value.Number..value