使用Dataweave将多维数组转换为一维数组
Converting multi dimensional array to single dimensional array using Dataweave
需要通过重复 parent 属性和 child 属性将 multi-dimensional 数组 (json) 转换为一维数组。
条件是parent可能有child也可能没有child。
有 100 多个属性需要映射,所以如果我可以映射每个属性而不定义单个属性名称(如果可行),那就太好了。
如果只用.dwl就可以解决这个问题就好了
原始负载:
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"child": [
{
"childAttribute1": "inner1-1-1",
"childAttribute2": "inner1-1-2"
},
{
"childAttribute1": "inner1-2-1",
"childAttribute2": "inner1-2-2"
},
{
"childAttribute1": "inner1-3-1",
"childAttribute2": "inner1-3-2"
}
]
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"parentAttribute2": "parent2-2",
"parentAttribute3": "parent2-3",
"child": [
{
"childAttribute1": "inner2-1-1",
"childAttribute2": "inner2-1-2"
}
]
},
{
"id": "3",
"parentAttribute1": "parent3-1",
"parentAttribute2": "parent3-2",
"parentAttribute3": "parent3-3"
}
]
翻译后的预期负载 - 场景 1 - 所有属性
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-1-1",
"childAttribute2": "inner1-1-2"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-2-1",
"childAttribute2": "inner1-2-2"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-3-1",
"childAttribute2": "inner1-3-2"
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"parentAttribute2": "parent2-2",
"parentAttribute3": "parent2-3",
"childAttribute1": "inner2-1-1",
"childAttribute2": "inner2-1-2"
},
{
"id": "3",
"parentAttribute1": "parent3-1",
"parentAttribute2": "parent3-2",
"parentAttribute3": "parent3-3"
}
]
翻译后的预期负载 - 场景 2 - 仅部分属性
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-1-1"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-2-1"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-3-1"
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"childAttribute1": "inner2-1-1"
},
{
"id": "3",
"parentAttribute1": "parent3-1",
}
]
尝试使用 reduce、group 函数但无法合并它们。
n/a
n/a
关键是用flatten加嵌套贴图。这样您就可以访问这两个级别,以便您可以使用它们进行操作。
%dw 2.0
output application/json
---
flatten(payload map
((parent, index) ->
if (parent.child?)
parent.child map ((child, index) -> (parent - "child") ++ child)
else
[parent]
)
)
对于 dw 1,这是解决方案
%dw 1.0
%output application/json
---
flatten (payload map
((parent, index) ->
parent.child map ((child, index) -> (parent - "child") ++ child) when (parent.child?)
otherwise
[parent]
)
)
需要通过重复 parent 属性和 child 属性将 multi-dimensional 数组 (json) 转换为一维数组。 条件是parent可能有child也可能没有child。 有 100 多个属性需要映射,所以如果我可以映射每个属性而不定义单个属性名称(如果可行),那就太好了。
如果只用.dwl就可以解决这个问题就好了 原始负载:
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"child": [
{
"childAttribute1": "inner1-1-1",
"childAttribute2": "inner1-1-2"
},
{
"childAttribute1": "inner1-2-1",
"childAttribute2": "inner1-2-2"
},
{
"childAttribute1": "inner1-3-1",
"childAttribute2": "inner1-3-2"
}
]
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"parentAttribute2": "parent2-2",
"parentAttribute3": "parent2-3",
"child": [
{
"childAttribute1": "inner2-1-1",
"childAttribute2": "inner2-1-2"
}
]
},
{
"id": "3",
"parentAttribute1": "parent3-1",
"parentAttribute2": "parent3-2",
"parentAttribute3": "parent3-3"
}
]
翻译后的预期负载 - 场景 1 - 所有属性
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-1-1",
"childAttribute2": "inner1-1-2"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-2-1",
"childAttribute2": "inner1-2-2"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"parentAttribute2": "parent1-2",
"parentAttribute3": "parent1-3",
"childAttribute1": "inner1-3-1",
"childAttribute2": "inner1-3-2"
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"parentAttribute2": "parent2-2",
"parentAttribute3": "parent2-3",
"childAttribute1": "inner2-1-1",
"childAttribute2": "inner2-1-2"
},
{
"id": "3",
"parentAttribute1": "parent3-1",
"parentAttribute2": "parent3-2",
"parentAttribute3": "parent3-3"
}
]
翻译后的预期负载 - 场景 2 - 仅部分属性
[
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-1-1"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-2-1"
},
{
"id": "1",
"parentAttribute1": "parent1-1",
"childAttribute1": "inner1-3-1"
},
{
"id": "2",
"parentAttribute1": "parent2-1",
"childAttribute1": "inner2-1-1"
},
{
"id": "3",
"parentAttribute1": "parent3-1",
}
]
尝试使用 reduce、group 函数但无法合并它们。
n/a
n/a
关键是用flatten加嵌套贴图。这样您就可以访问这两个级别,以便您可以使用它们进行操作。
%dw 2.0
output application/json
---
flatten(payload map
((parent, index) ->
if (parent.child?)
parent.child map ((child, index) -> (parent - "child") ++ child)
else
[parent]
)
)
对于 dw 1,这是解决方案
%dw 1.0
%output application/json
---
flatten (payload map
((parent, index) ->
parent.child map ((child, index) -> (parent - "child") ++ child) when (parent.child?)
otherwise
[parent]
)
)