jolt - 来自数组的 JOLT 转换
问题描述
我正在进行转换,并且在我将输入定义为数组之前它工作正常。我当前(工作!)示例是:输入
{
"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]
.
也适用于 trainerNamefirstElement
使用modify-overwrite-beta
操作。
[
{
"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))"
}
}
]
推荐阅读
- android - 自签名证书和 Nativescript Android 应用程序
- php - PHP7 现在抛出未定义索引异常。我可以禁用这个吗?
- c# - 如何检查我的表是否存在于 Firebase 中?
- c - C: select() - 信号中断
- php - 强制执行 HTTP/1.1 而不是 HTTP/2
- google-analytics - Google Analytics - BigQuery 导出中的访问次数是什么意思?
- angular - 带有弹出窗口的 Angular Material Table 行更新只有第一个数组值出现在所有编辑行中
- go - 如何调用反射得到的闭包函数?
- android - 如何从增量名称“表”中检索数据?
- r - r 计算行之间差异的有效方法