来自数组的 JOLT 转换
JOLT transformation from an array
我正在进行转换,在我将输入定义为数组之前,它工作正常。
我目前的(工作!)样本是:
输入
{
"trainerName": "Nahuel",
"trainingName": "1st Training",
"trainee1firstName": "Martin",
"trainee2firstName": "Para"
}
使用此 JOLT 规格:
[
{
"operation": "shift",
"spec": {
"trainerName": "trainerName",
"trainingName": "training.[0].trainingName",
"trainee1*": "training.[0].trainees.[0].&(0,1)",
"trainee2*": "training.[0].trainees.[1].&(0,1)"
}
}
]
输出是:
{
"trainerName" : "Nahuel",
"training" : [ {
"trainingName" : "1st Training",
"trainees" : [ {
"firstName" : "Martin"
}, {
"firstName" : "Para"
} ]
} ]
}
这是完美的,但是:对我来说真正的预期输入是这个:
[
{
"rowNumber": 1,
"trainerName": "Nahuel",
"trainingName": "1st Training",
"trainee1firstName": "Martin",
"trainee2firstName": "Para"
},
{
"rowNumber": 2,
"trainerName": "Nahuel",
"trainingName": "2nd Training",
"trainee1firstName": "Greg",
"trainee2firstName": "Thomas"
}
]
我需要这样的输出:
{
"trainerName": "Nahuel",
"training": [{
"trainingName": "1st Training",
"trainees": [{
"firstName": "Martin"
}, {
"firstName": "Para"
}]
},
{
"trainingName": "2nd Training",
"trainees": [{
"firstName": "Greg"
}, {
"firstName": "Thomas"
}]
}
]
}
我将在每个数组对象中收到 "trainerName",但我只需要使用一个。
你能帮我找出解决办法吗?我浏览了多种解决方案,但找不到适合此示例的解决方案。
非常感谢!最佳!
您的规格几乎是正确的。您需要 [&1]
而不是 [0]
。
同样对于 trainerName 使用 modify-overwrite-beta
操作 firstElement
。
[
{
"operation": "shift",
"spec": {
"*": {
"trainerName": "trainerName",
"trainingName": "training.[&1].trainingName",
"trainee1*": "training.[&1].trainees.[0].&(0,1)",
"trainee2*": "training.[&1].trainees.[1].&(0,1)"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"trainerName": "=firstElement(@(1,trainerName))"
}
}
]
我正在进行转换,在我将输入定义为数组之前,它工作正常。 我目前的(工作!)样本是: 输入
{
"trainerName": "Nahuel",
"trainingName": "1st Training",
"trainee1firstName": "Martin",
"trainee2firstName": "Para"
}
使用此 JOLT 规格:
[
{
"operation": "shift",
"spec": {
"trainerName": "trainerName",
"trainingName": "training.[0].trainingName",
"trainee1*": "training.[0].trainees.[0].&(0,1)",
"trainee2*": "training.[0].trainees.[1].&(0,1)"
}
}
]
输出是:
{
"trainerName" : "Nahuel",
"training" : [ {
"trainingName" : "1st Training",
"trainees" : [ {
"firstName" : "Martin"
}, {
"firstName" : "Para"
} ]
} ]
}
这是完美的,但是:对我来说真正的预期输入是这个:
[
{
"rowNumber": 1,
"trainerName": "Nahuel",
"trainingName": "1st Training",
"trainee1firstName": "Martin",
"trainee2firstName": "Para"
},
{
"rowNumber": 2,
"trainerName": "Nahuel",
"trainingName": "2nd Training",
"trainee1firstName": "Greg",
"trainee2firstName": "Thomas"
}
]
我需要这样的输出:
{
"trainerName": "Nahuel",
"training": [{
"trainingName": "1st Training",
"trainees": [{
"firstName": "Martin"
}, {
"firstName": "Para"
}]
},
{
"trainingName": "2nd Training",
"trainees": [{
"firstName": "Greg"
}, {
"firstName": "Thomas"
}]
}
]
}
我将在每个数组对象中收到 "trainerName",但我只需要使用一个。
你能帮我找出解决办法吗?我浏览了多种解决方案,但找不到适合此示例的解决方案。
非常感谢!最佳!
您的规格几乎是正确的。您需要 [&1]
而不是 [0]
。
同样对于 trainerName 使用 modify-overwrite-beta
操作 firstElement
。
[
{
"operation": "shift",
"spec": {
"*": {
"trainerName": "trainerName",
"trainingName": "training.[&1].trainingName",
"trainee1*": "training.[&1].trainees.[0].&(0,1)",
"trainee2*": "training.[&1].trainees.[1].&(0,1)"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"trainerName": "=firstElement(@(1,trainerName))"
}
}
]