java - 如何在 Jolt Transformation 中循环时展平一组对象?
问题描述
我正在尝试使用 Jolt 将传入的消息转换为某些自定义对象的列表。
但是,如果传入数组中有嵌套值,我无法获得所需的输出。
传入消息:
[
{
"type": "Hourly",
"employeeIdDetails": [
{
"id": "900",
"idType": "HR_EMP"
}
]
},
{
"type": "Salaried",
"employeeIdDetails": [
{
"id": "436",
"idType": "SAL_EMP"
},
{
"id": "111",
"idType": "SAL_EMP"
}
]
},
{
"type": "Salaried",
"employeeIdDetails": [
{
"id": "437",
"idType": "SAL_EMP"
}
]
}
]
颠簸规格
[
{
"operation": "shift",
"spec": {
"*": {
"type": {
"Salaried": {
"@2": {
"employeeIdDetails": {
"*": {
"idType": {
"SAL_EMP": {
"@2": {
"id": "test[&4].ids",
"idType": "test[&4].types"
}
}
}
}
}
}
}
}
}
}
}
]
电流输出:
{
"test" : [ {
"ids" : [ "436", "437" ],
"types" : [ "SAL_EMP", "SAL_EMP" ]
}, {
"ids" : "111",
"types" : "SAL_EMP"
} ]
}
预期产出
{
"test" : [ {
"ids" : "436",
"types" : "SAL_EMP"
} ,
{
"ids" : "111",
"types" : "SAL_EMP"
} ,
{
"ids" : "437",
"types" : "SAL_EMP"
} ]
}
除了拥有所有对象外,顺序对我来说并不重要。
我认为,到目前为止我发现的问题是使用“&”。但是,不知道如何在没有它的情况下将值组合到 1 个对象中。
解决方案
也许这种方式适合你?
[
{
"operation": "shift",
"spec": {
"*": {
"type": {
"Salaried": {
"@(2,employeeIdDetails)": {
"*": {
"idType": {
"SAL_EMP": {
"@2": "test[]"
}
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"test": {
"*": {
"id": "test[&1].ids",
"idType": "test[&1].types"
}
}
}
}
]