Dataweave1.0 去除嵌套元素

Dataweave1.0 removing nested elements

我有两个 json 有效负载,第一个包含映射详细信息,第二个包含需要根据映射有效负载转换的实际数据

映射负载:

[
  {
    "SourceField": "CUSTOMER_NAME",
    "DestinationField": "Customer"
  },
  {
    "SourceField": "PROJECT_ID",
    "DestinationField": "ProjectID"
  }
]

实际数据负载

[
  {
    "CUSTOMER_NAME":"Smith",
    "PROJECT_ID": 12345
  },
  {
    "CUSTOMER_NAME":"James",
    "PROJECT_ID": 34563
  }
]

我正在尝试将输出设为

[
 {
   "Customer":"Smith",
   "ProjectID": 12345
 },
 {
   "Customer":"James",
   "ProjectID":34563
 }
]

DW 代码

%dw 1.0
%output application/json
%var mappingPayload = MappingPayload as in above example
%var actualData = ActualDataPayload as in above example
%var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)})
---
actualData map ((object,index)->{
    (index):object mapObject (value,key)->{
        (mappings[key]):value
    }
})

当前输出的问题是我能够将内容映射到预期的键,但它嵌套在索引中,有什么建议可以去掉嵌套元素吗?

试试这个..

%dw 1.0
%output application/json
%var mappingPayload = [
  {
    "SourceField": "CUSTOMER_NAME",
    "DestinationField": "Customer"
  },
  {
    "SourceField": "PROJECT_ID",
    "DestinationField": "ProjectID"
  }
]
%var actualData = [
  {
    "CUSTOMER_NAME":"Smith",
    "PROJECT_ID": 12345
  },
  {
    "CUSTOMER_NAME":"James",
    "PROJECT_ID": 34563
  }
]

%var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)}) 
---
actualData map ((object,index)->{

a:object mapObject (value,key)->{(mappings[key]):value}
}.a)

你现有的方法

actualData map ((object,index)->{

(index):object mapObject (value,key)->{(mappings[key]):value}
}reduce (index))

而不是

actualData map ((object,index) -> {
   (index):object mapObject (value,key) -> {(mappings[key]):value}
}

这样做:

actualData map ((object,index) -> {
   (object mapObject (value,key) -> {(mappings[key]):value})
}

您不需要顶层的对象,只需将其设为包含 () 的数组即可。

%dw 1.0
%output application/json
%var mappingPayload = [
  {
    "SourceField": "CUSTOMER_NAME",
    "DestinationField": "Customer"
  },
  {
    "SourceField": "PROJECT_ID",
    "DestinationField": "ProjectID"
  }
]

%var actualData = [
  {
    "CUSTOMER_NAME":"Smith",
    "PROJECT_ID": 12345
  },
  {
    "CUSTOMER_NAME":"James",
    "PROJECT_ID": 34563
  }
]

%var mappings = mappingPayload reduce ((env, obj={}) -> obj ++ {(env.SourceField):(env.DestinationField)})
---
actualData map (
    $ mapObject {
        (mappings[$$]): $
    }
)