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[$$]): $
}
)
我有两个 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[$$]): $
}
)