Dataweave 从数组对象中提取对象并创建一个 json 请求

Dataweave extract object from array object and create a json request

我正在学习 dataweave,我正在尝试提取 phoneNumber,其中“contact”是对象数组。以下是示例请求。 要求:

{
    "contact": [{
            "phoneNumber": "2234567890",
            "emailId": "abc@abc.com"
        },
        {

            "phoneNumber": "2012020004",
            "emailId": "xyz@abc.com"
        }
    ]
}

预期输出是

{
  "PhoneNumberList[0]": "2234567890",
  "PhoneNumberList[1]": "2012020004"
}

我不想使用下面的代码

output application/json
---
{
    "PhoneNumberList[0]" : payload.contact[0].phoneNumber,
    "PhoneNumberList[1]" : payload.contact[1].phoneNumber
}

你能建议最好的处理方法吗?

试试这个:

%dw 2.0
output application/json

var data = {
    "contact": [{
            "phoneNumber": "2234567890",
            "emailId": "abc@abc.com"
        },
        {

            "phoneNumber": "2012020004",
            "emailId": "xyz@abc.com"
        }
    ]
}
---
data.contact.*phoneNumber map [$$,$]
reduce (e,acc={}) -> acc ++ {("phoneNumberList[$(e[0])]": e[1])}

我利用了

这是另一个解决方案,由于懒惰求值可能会好一点:

%dw 2.0
output application/json

var data = {
    "contact": [{
            "phoneNumber": "2234567890",
            "emailId": "abc@abc.com"
        },
        {

            "phoneNumber": "2012020004",
            "emailId": "xyz@abc.com"
        }
    ]
}
---
{(data.contact.*phoneNumber map {"phoneNumberList[$($$)]":$})}

我用 Dynamic Elements

替换了 reduce 函数