使用Dataweave将键和值数组压缩为一个对象

问题描述

我需要从两个数组开始生成一个对象,一个数组具有键名,另一个数组具有值。我可以使用以下代码获取它:

var keys = ["fieldA","fieldB","fieldC"]
var values = [45,"data",{some: "object"}]
---
(keys zip values) map ((keyvalueArray,index) -> 
    {
        (keyvalueArray[0]):keyvalueArray[1]
    }
) reduce ((singleKeyObject,acc) -> acc ++ singleKeyObject)

代码产生以下输出

{
  "fieldA": 45,"fieldB": "data","fieldC": {
    "some": "object"
  }
}

有没有一种功能可以仅用一个或至少比我找到的解决方案来替换所有这三个步骤?

解决方法

您不需要使用zip,reduce甚至concat ++

尝试一下:

    %dw 2.0
    output application/json
    var keys = ["fieldA","fieldB","fieldC"]
    var value = [45,"data",{some: "object"}]
    ---
    {
        (  keys map (data,index) -> {((data):value[index])}  )
    }

诀窍是在表达式之前用大括号和括号括住表达式

示例:

{ 
     ( <expression> )
}
,

这也很好。

 %dw 2.0
    output application/json
    var keys = ["fieldA",{some: "object"}]
    ---
   {
          (keys map (data,index) -> (data):value[index])
    }