
在处理 JSON 数据时,我们经常需要对某个对象中的所有数值进行汇总,并将汇总结果作为新的字段添加到输出中。例如,给定以下输入 JSON:
{
"accounts": {
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0
}
}我们的目标是计算 accounts 对象中所有账户的数值之和(即 1 + 0 + 1 + 0 = 2),并将结果以 "total accounts": 2 的形式添加到输出中,同时保留原始的账户信息。期望的输出如下:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"total accounts": 2
}接下来,我们将详细介绍如何使用 Jolt 来实现这一转换。
为了实现上述目标,我们需要设计一个包含三个操作步骤的 Jolt 转换规范:
第一个 shift 操作的目的是将 accounts 对象中的所有键值对提升到根级别,并同时将所有账户的数值收集到一个临时数组中,以便后续进行求和。
{
"operation": "shift",
"spec": {
"accounts": {
"*": [
".&",
"accountsAccumulator"
]
}
}
}解析:
经过此步骤后,中间输出将类似于:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"accountsAccumulator": [1, 0, 1, 0]
}第二个操作是 modify-overwrite-beta,它用于执行数据计算和修改。我们将利用其内置的 intSum 函数来计算 accountsAccumulator 数组的总和。
{
"operation": "modify-overwrite-beta",
"spec": {
"total accounts": "=intSum(@(1,accountsAccumulator))"
}
}解析:
经过此步骤后,中间输出将变为:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"accountsAccumulator": [1, 0, 1, 0],
"total accounts": 2
}最后一个 shift 操作的目的是清理临时字段 accountsAccumulator,并确保最终输出的结构符合要求。
{
"operation": "shift",
"spec": {
"accountsAccumulator": null,
"*": "&"
}
}解析:
最终,我们将得到预期的输出:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"total accounts": 2
}将上述三个操作合并,完整的 Jolt 转换规范如下:
[
{
"operation": "shift",
"spec": {
"accounts": {
"*": [
".&",
"accountsAccumulator"
]
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"total accounts": "=intSum(@(1,accountsAccumulator))"
}
},
{
"operation": "shift",
"spec": {
"accountsAccumulator": null,
"*": "&"
}
}
]通过本教程,我们学习了如何使用 Jolt 的 shift 和 modify-overwrite-beta 操作来对 JSON 对象中的数值进行求和,并将结果作为一个新字段添加。这种多阶段的转换方法在 Jolt 中非常常见,能够帮助我们灵活地处理各种复杂的数据转换需求。理解每个操作的职责以及 Jolt 路径表达式和内置函数的使用是掌握 Jolt 转换的关键。
以上就是Jolt 数据转换:如何对 JSON 对象中的数值进行求和并添加新字段的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号