我有如下从数据库中检索的对象的 json 数组
[
{ "Projectid":"A1234","ProjectLvl":1,"desc":"A1234-desc"},
{ "Projectid":"A1234.1","ProjectLvl":2,"desc":"A1234.1-desc"},
{ "Projectid":"A1234.1.1","ProjectLvl":3,"desc":"A1234.1.1-desc"},
{ "Projectid":"A1234.1.1.1","ProjectLvl":4,"desc":"A1234.1.1.1-desc"},
{ "Projectid":"A1234.2","ProjectLvl":2,"desc":"A1234.2-desc"},
{ "Projectid":"A1234.2.1","ProjectLvl":3,"desc":"A1234.2.1-desc"}
]
Run Code Online (Sandbox Code Playgroud)
我必须创建以下 xml。您能否帮助使用 dataweave 函数以在 mule 变换组件中使用。
<projects>
<project level="1">
<desc>A1234-desc</desc>
<project level="2">
<desc>A1234.1-desc</desc>
<project level="3">
<desc>A1234.1.1-desc</desc>
<project level="4">
<desc>A1234.1.1.1-desc</desc>
</project>
</project>
</project>
<project level="2">
<desc>A1234.2-desc
</desc>
<project level="3">
<desc>A1234.2.1-desc
</desc>
</project>
</project>
</project>
</projects>
Run Code Online (Sandbox Code Playgroud)
嗨,好问题我的解决方案尝试使用树上的减少和递归更新来更新具有来自 id 的路径的节点
%dw 2.0
output application/xml
fun updateTree(tree, path: Array<Number>, treeNode: {}) = do {
if(sizeOf(path) == 1)
tree ++ treeNode
else
tree mapObject ((value, key, index) ->
if(index + 1 == path[0] and key ~= "project")
{
(key): updateTree(value, path[1 to -1], treeNode)
}
else
{
(key):value
}
)
}
---
projects: {
(
payload reduce ((project, accumulator = {}) -> do {
var path = project.Projectid[sizeOf("A1234") to -1] default "" splitBy "." filter !isEmpty($) map $ as Number
---
updateTree(accumulator,path,{
project @(level: project.ProjectLvl): {
desc: project.desc
}
})
}
)
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |