讲师中心 微信公众号
AI工具推荐 视频效率加速

使用Jolt进行JSON数据求和:计算对象内数值总和的实战指南

云磊同学_1913

云磊同学_1913

发布时间:2025-07-23 15:30:02

|

517人浏览过

|

来源于php中文网

原创

使用jolt进行json数据求和:计算对象内数值总和的实战指南

本文详细介绍了如何利用Jolt转换工具,对JSON对象中的数值进行求和操作,并将总和添加为新的字段。通过一个三步走的Jolt Spec,我们展示了如何巧妙地收集目标数值、运用modify-overwrite-beta操作的intSum函数进行计算,并最终清理临时数据,实现高效、精准的数据聚合。

在数据处理和转换场景中,经常需要对JSON结构中的数值字段进行聚合计算,例如求和。Jolt作为一款强大的JSON转换工具,能够通过其灵活的转换规范(Spec)实现复杂的结构重塑和数据操作。本文将深入探讨如何使用Jolt,将一个JSON对象中所有账户的数值进行求和,并将总和作为一个新的字段添加到输出中。

核心问题:JSON对象内数值求和

假设我们有以下JSON输入,其中accounts对象包含多个账户及其对应的数值:

{
  "accounts": {
    "canara": 1,
    "sbi": 0,
    "axis": 1,
    "hdfc": 0
  }
}

我们的目标是计算accounts对象中所有数值(1, 0, 1, 0)的总和,并将结果(2)添加到一个名为total accounts的新字段中,同时保留原始的账户信息。期望的输出结构如下:

{
  "canara": 1,
  "sbi": 0,
  "axis": 1,
  "hdfc": 0,
  "total accounts": 2
}

Jolt求和转换详解

要实现上述转换,我们需要一个包含三个操作步骤的Jolt Spec。这三个步骤协同工作,分别负责数据扁平化、数值聚合计算以及最终的结构整理。

第一步:扁平化并收集待求和数据

此步骤使用shift操作,其目的是将accounts对象中的所有键值对提升到根级别,同时将所有数值收集到一个临时数组中,以便后续求和。

[
  {
    "operation": "shift",
    "spec": {
      "accounts": {
        "*": [
          ".&",
          "accountsAccumulator"
        ]
      }
    }
  },
  // ... 后续步骤
]

解释:

  • "accounts":匹配输入JSON中的accounts字段。
  • "*":匹配accounts对象下的所有键(如canara, sbi等)。
  • ".&":这是一个重要的Jolt路径表达式,它表示将当前匹配到的值(例如1、0)以及其对应的键(例如canara、sbi)一起输出。.代表当前值,&代表当前键。在这里,它会将accounts.canara: 1转换为canara: 1,accounts.sbi: 0转换为sbi: 0,以此类推,从而实现扁平化。
  • "accountsAccumulator":这是一个自定义的临时字段名。当accounts下的每个值被处理时,它们不仅通过.&被扁平化,还会被收集到名为accountsAccumulator的数组中。例如,accountsAccumulator会变成[1, 0, 1, 0]。

经过这一步,中间输出大致会是:

科学计算器在线使用工具代码
科学计算器在线使用工具代码

html5 css3制作在线科学计算器ui布局,3D计算器面板,加减乘除数字计算器工具特效。

下载
{
  "canara": 1,
  "sbi": 0,
  "axis": 1,
  "hdfc": 0,
  "accountsAccumulator": [1, 0, 1, 0]
}

第二步:利用modify-overwrite-beta计算总和

此步骤使用modify-overwrite-beta操作,它是Jolt中用于执行数学计算、字符串操作等复杂逻辑的关键。我们将在这里计算accountsAccumulator数组的总和。

[
  // ... 前一步骤
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "total accounts": "=intSum(@(1,accountsAccumulator))"
    }
  },
  // ... 后续步骤
]

解释:

  • "total accounts":这是我们希望在最终输出中添加的新字段名。
  • "=intSum(@(1,accountsAccumulator))":
    • =:表示这是一个函数调用。
    • intSum():Jolt内置的数学函数,用于计算整数数组的总和。如果需要处理浮点数,可以使用doubleSum()。
    • @(1,accountsAccumulator):这是一个Jolt的相对路径引用。@表示引用数据,1表示向上回溯一层父级(因为accountsAccumulator是在前一步骤中在根级别创建的),accountsAccumulator指定了要引用的字段。因此,它引用了上一步骤生成的accountsAccumulator数组。

经过这一步,中间输出将变为:

{
  "canara": 1,
  "sbi": 0,
  "axis": 1,
  "hdfc": 0,
  "accountsAccumulator": [1, 0, 1, 0],
  "total accounts": 2
}

第三步:清理临时字段并重塑结构

最后一步再次使用shift操作,其目的是移除不再需要的临时字段accountsAccumulator,并确保所有其他字段都保留在最终输出中。

[
  // ... 前两步骤
  {
    "operation": "shift",
    "spec": {
      "accountsAccumulator": null,
      "*": "&"
    }
  }
]

解释:

  • "accountsAccumulator": null:将accountsAccumulator字段映射到null,这意味着它将从最终输出中被移除。
  • "*": "&":这是一个通配符规则,表示将当前层级(根级别)的所有其他字段(即canara, sbi, axis, hdfc, total accounts)原样保留并输出到最终结果的根级别。

完整Jolt Spec示例

将上述三个步骤组合起来,就得到了完整的Jolt转换规范:

[
  {
    "operation": "shift",
    "spec": {
      "accounts": {
        "*": [
          ".&",
          "accountsAccumulator"
        ]
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "total accounts": "=intSum(@(1,accountsAccumulator))"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "accountsAccumulator": null,
      "*": "&"
    }
  }
]

注意事项与最佳实践

  • 多步转换的必要性:对于涉及聚合计算的复杂转换,通常需要分解为多个Jolt操作步骤。每个步骤完成特定的任务,如数据提取、计算、清理等。
  • 临时字段的使用:在Jolt中,创建临时字段(如本例中的accountsAccumulator)是常见的模式,用于存储中间结果,以便后续步骤进行处理。
  • modify-overwrite-beta操作:这是Jolt中进行数学运算、字符串处理等高级逻辑的核心。务必熟悉其内置函数(如intSum, doubleSum, min, max等)和相对路径引用语法。
  • 路径引用@(level, field):理解@符号和level参数对于正确引用前一步骤生成的数据至关重要。level表示向上回溯的层级数。
  • null的妙用:在shift操作中,将字段映射到null是移除不需要的字段的常用方法。
  • *通配符`和&**:它们是Jolt中实现灵活匹配和数据保留的关键。*匹配所有键,&`表示引用当前匹配到的键名。

总结

通过本教程,我们详细展示了如何使用Jolt实现JSON对象内数值的求和操作。这不仅涉及简单的结构重塑,更利用了Jolt强大的modify-overwrite-beta操作和多步转换的策略。掌握这种方法,将有助于您在各种数据集成和转换场景中,更高效、灵活地处理JSON数据,实现复杂的聚合和计算需求。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2095

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3162

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1056

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3599

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1698

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2604

2023.09.04

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JDK 27官方文档
JDK 27官方文档

共0课时 | 0人学习

LLVM入门手册
LLVM入门手册

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn