【发布时间】:2020-09-10 00:16:43
【问题描述】:
我有这个扁平化的对象
{
"abc.def.ghi": "foo",
"abc.def.jkl": "bar"
}
我想写一个dataweave把它转换成原来的对象,即
{
"abc": {
"def": {
"ghi": "foo",
"jkl": "bar"
}
}
}
我试图避免对键进行硬编码,因为它是一个非常大的对象,所以我不想要这样的东西:
%dw 2.0
var test = {
"abc.def.ghi": "foo",
"abc.def.jkl": "bar"
}
output application/json
---
{
abc: {
def: {
ghi: test."abc.def.ghi",
jkl: test."abc.def.jkl"
}
}
}
我可以使用一些可用的 dataweave 函数组合来实现这一点吗?
这是我迄今为止尝试过的:
%dw 2.0
var test = {
"abc.def.ghi": "foo",
"abc.def.jkl": "bar"
}
output application/json
---
test mapObject ((value, key) ->
(key as String splitBy ".")[-1 to 0]
reduce ((item, acc = value) ->
(item): acc
/*
First item=ghi,acc=foo => acc = {ghi: "foo"}
next item=def, acc={ghi: "foo"} => acc={def:{ghi:"foo"}}
*/
)
)
但这会生成某种单独的嵌套 JSON 对。这是上面代码的输出:
{
"abc": {
"def": {
"ghi": "foo"
}
},
"abc": {
"def": {
"jkl": "bar"
}
}
}
【问题讨论】:
标签: json mule dataweave mulesoft