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

Zip key and value arrays into one object with 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","fieldB","fieldC"]
    var value = [45,"data", {some: "object"}]
    ---
   {
          (keys map (data,index) -> (data):value[index])
    }