
Jolt 是一个用于 JSON 数据转换的 Java 库,它提供了一系列强大的操作符,如 shift、default、remove、sort、cardinality 和 modify 等,使用户能够声明式地定义 JSON 数据的重塑、过滤和聚合逻辑。Jolt 的核心思想是使用一个 JSON 结构作为“转换规范”(Spec),来描述如何将输入 JSON 转换为目标 JSON。
假设我们有一个包含多个账户余额的 JSON 对象,这些余额都嵌套在 accounts 字段下:
输入 JSON 示例:
{
"accounts": {
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0
}
}我们的目标是保留所有原始账户信息,同时计算 accounts 对象中所有账户余额的总和,并将这个总和以 total accounts 的键名添加到输出 JSON 的根级别。
期望输出 JSON 示例:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"total accounts": 2
}为了实现上述转换,我们需要编写一个包含三个操作步骤的 Jolt Spec。
此步骤的目的是将 accounts 对象中的每个键值对平铺到根级别,并同时将所有的数值收集到一个临时的数组中,以便后续求和。
{
"operation": "shift",
"spec": {
"accounts": {
"*": [
".&",
"accountsAccumulator"
]
}
}
}经过此步骤后,中间结果将类似:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"accountsAccumulator": [1, 0, 1, 0]
}在这一步中,我们利用 modify-overwrite-beta 操作符来计算 accountsAccumulator 数组中所有元素的总和,并将其赋值给 total accounts 字段。
{
"operation": "modify-overwrite-beta",
"spec": {
"total accounts": "=intSum(@(1,accountsAccumulator))"
}
}此步骤将计算 [1, 0, 1, 0] 的总和(结果为 2),并将其添加到 total accounts 字段。
中间结果将变为:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"accountsAccumulator": [1, 0, 1, 0],
"total accounts": 2
}最后一步是清理临时生成的 accountsAccumulator 字段,并确保所有其他字段都正确地保留在输出的根级别。
{
"operation": "shift",
"spec": {
"accountsAccumulator": null,
"*": "&"
}
}最终,accountsAccumulator 被移除,只剩下原始账户信息和新计算出的 total accounts 字段。
将以上三个步骤组合起来,就构成了完整的 Jolt Spec:
[
{
"operation": "shift",
"spec": {
"accounts": {
"*": [
".&",
"accountsAccumulator"
]
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"total accounts": "=intSum(@(1,accountsAccumulator))"
}
},
{
"operation": "shift",
"spec": {
"accountsAccumulator": null,
"*": "&"
}
}
]使用上述 Jolt Spec 对输入 JSON 进行转换:
输入 JSON:
{
"accounts": {
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0
}
}执行 Jolt 转换后,将得到以下输出:
{
"canara": 1,
"sbi": 0,
"axis": 1,
"hdfc": 0,
"total accounts": 2
}这与我们的期望输出完全一致。
通过本教程,我们学习了如何利用 Jolt 的 shift 和 modify-overwrite-beta 操作符,结合内置的数学函数,高效地对 JSON 嵌套对象中的数值进行求和。这种分步转换的策略,即先平铺聚合数据,再进行计算,最后清理临时字段,是 Jolt 处理复杂数据转换任务的典型范式。掌握这些核心概念,将有助于您更灵活地应对各种 JSON 数据转换挑战。
以上就是Jolt 数据转换:计算 JSON 嵌套对象中所有数值的总和的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号