使用 Josson 库聚合 JSON 数组中具有相同键值的对象

使用 josson 库聚合 json 数组中具有相同键值的对象

本文介绍了如何使用 Josson 库,根据特定条件(如 userid、groupname、segment 等)对 JSON 数组中的对象进行分组和聚合。通过 Josson 提供的强大功能,可以方便地对 JSON 数据进行转换和处理,实现按条件求和等复杂操作,最终生成期望的聚合结果。

使用 Josson 聚合 JSON 数据

在处理 JSON 数据时,经常会遇到需要根据某些键的值将数据分组,并对同一组内的数据进行聚合的情况。例如,给定一个包含交易记录的 JSON 数组,需要按照用户 ID、交易组和交易类型等条件将交易记录分组,并计算每组的总交易金额。手动编写代码实现这种聚合逻辑通常比较繁琐且容易出错。Josson 库提供了一种简洁高效的方式来完成这类任务。

1. 引入 Josson 库

首先,需要在项目中引入 Josson 库。可以通过 Maven 或 Gradle 等构建工具添加依赖。

Maven:

    com.octomix.josson    josson    最新版本

Gradle:

implementation 'com.octomix.josson:josson:最新版本'

请将 “最新版本” 替换为 Josson 库的实际版本号。

2. 加载 JSON 数据

使用 Josson 提供的 Josson.fromJsonString() 方法将 JSON 字符串加载到 Josson 对象中。

import com.octomix.josson.Josson;import com.octomix.josson.JsonNode;public class JsonAggregation {    public static void main(String[] args) throws Exception {        String jsonString = "[{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"66CN-063CC","symbol":"INX22","exchange":"SGXFO","expirydate":"24NOV2022"," +                ""scripcode":"7536847","securitytype":"FUT","strikeprice":0,"opttype":"XX","bfqty":-107,"bfrate":18462.05,"bfamt":3950878.6999999997,"buyqty":21,"sellqty":59,"netqty":-38," +                ""cfqty":-145,"cfamt":5358027.699999999,"ltp":"18433.5","grossmtm":0,"brokerageamt":48,"netmtm":0,"currency":"USD","usdrate":81.33,"clientsharing":50,"broksharing":0," +                ""comsharing":50,"multiplier":2}," +                "{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"CW05","symbol":"NIFTY","exchange":"NSEFO"," +                ""expirydate":"24NOV2022","scripcode":"61349","securitytype":"OPT","strikeprice":17800,"opttype":"CE","bfqty":4050,"bfrate":673.3,"bfamt":-2726865,"buyqty":1650," +                ""sellqty":300,"netqty":1350,"cfqty":5400,"cfamt":-3677257.5,"ltp":"657.0","grossmtm":0,"brokerageamt":1038.81126525,"netmtm":0,"currency":"INR","usdrate":1,"clientsharing":0," +                ""broksharing":0,"comsharing":100,"multiplier":1}," +                "{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"CW05","symbol":"NIFTY","exchange":"NSEFO"," +                ""expirydate":"24NOV2022","scripcode":"61350","securitytype":"OPT","strikeprice":17800,"opttype":"PE","bfqty":-4050,"bfrate":14.7,"bfamt":59535,"buyqty":300,"sellqty":1650," +                ""netqty":-1350,"cfqty":-5400,"cfamt":78900,"ltp":"13.6","grossmtm":0,"brokerageamt":31.850901,"netmtm":0,"currency":"INR","usdrate":1,"clientsharing":0,"broksharing":0," +                ""comsharing":100,"multiplier":1}]";        Josson josson = Josson.fromJsonString(jsonString);        // ... (后续步骤)    }}

3. 使用 group() 函数进行分组

group() 函数允许你根据一个或多个键对 JSON 数组进行分组。map() 函数用于指定用于分组的键。

JsonNode node = josson.getNode(    "group(map(userid,groupname,segment,accountcode,symbol,exchange,expirydate," +    "          currency,usdrate,clientsharing,broksharing,comsharing,multiplier))" +    ".map(key.userid," +    "     key.groupname," +    "     key.segment," +    "     key.accountcode," +    "     key.symbol," +    "     key.exchange," +    "     key.expirydate," +    "     key.currency," +    "     key.usdrate," +    "     key.clientsharing," +    "     key.broksharing," +    "     key.comsharing," +    "     key.multiplier," +    "     elements.bfqty.sum()," +    "     elements.bfrate.sum()," +    "     elements.bfamt.sum()," +    "     elements.buyqty.sum()," +    "     elements.sellqty.sum()," +    "     elements.netqty.sum()," +    "     elements.cfqty.sum()," +    "     elements.cfamt.sum()," +    "     elements.ltp.sum()," +    "     elements.grossmtm.sum()," +    "     elements.brokerageamt.sum()," +    "     elements.netmtm.sum())");System.out.println(node.toPrettyString());

在这个例子中,group(map(userid,groupname,segment,accountcode,symbol,exchange,expirydate,currency,usdrate,clientsharing,broksharing,comsharing,multiplier)) 根据 userid、groupname、segment、accountcode、symbol、exchange、expirydate、currency、usdrate、clientsharing、broksharing、comsharing 和 multiplier 的组合值对数据进行分组。

4. 使用 map() 函数进行聚合

在 group() 函数之后,使用 map() 函数对每个分组中的数据进行聚合。key 引用分组键的值,elements 引用分组中的所有元素。

例如,elements.bfqty.sum() 计算每个分组中 bfqty 字段的总和。 可以对分组中的其他数值字段进行类似的操作,例如 bfrate、bfamt、buyqty 等。

5. 获取结果

getNode() 方法返回一个 JsonNode 对象,可以使用 toPrettyString() 方法将其转换为格式化的 JSON 字符串并打印出来。

完整代码示例

import com.octomix.josson.Josson;import com.octomix.josson.JsonNode;public class JsonAggregation {    public static void main(String[] args) throws Exception {        String jsonString = "[{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"66CN-063CC","symbol":"INX22","exchange":"SGXFO","expirydate":"24NOV2022"," +                ""scripcode":"7536847","securitytype":"FUT","strikeprice":0,"opttype":"XX","bfqty":-107,"bfrate":18462.05,"bfamt":3950878.6999999997,"buyqty":21,"sellqty":59,"netqty":-38," +                ""cfqty":-145,"cfamt":5358027.699999999,"ltp":"18433.5","grossmtm":0,"brokerageamt":48,"netmtm":0,"currency":"USD","usdrate":81.33,"clientsharing":50,"broksharing":0," +                ""comsharing":50,"multiplier":2}," +                "{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"CW05","symbol":"NIFTY","exchange":"NSEFO"," +                ""expirydate":"24NOV2022","scripcode":"61349","securitytype":"OPT","strikeprice":17800,"opttype":"CE","bfqty":4050,"bfrate":673.3,"bfamt":-2726865,"buyqty":1650," +                ""sellqty":300,"netqty":1350,"cfqty":5400,"cfamt":-3677257.5,"ltp":"657.0","grossmtm":0,"brokerageamt":1038.81126525,"netmtm":0,"currency":"INR","usdrate":1,"clientsharing":0," +                ""broksharing":0,"comsharing":100,"multiplier":1}," +                "{"userid":"CNAF01","groupname":"Abhay","segment":"CosCLFIN","accountcode":"CW05","symbol":"NIFTY","exchange":"NSEFO"," +                ""expirydate":"24NOV2022","scripcode":"61350","securitytype":"OPT","strikeprice":17800,"opttype":"PE","bfqty":-4050,"bfrate":14.7,"bfamt":59535,"buyqty":300,"sellqty":1650," +                ""netqty":-1350,"cfqty":-5400,"cfamt":78900,"ltp":"13.6","grossmtm":0,"brokerageamt":31.850901,"netmtm":0,"currency":"INR","usdrate":1,"clientsharing":0,"broksharing":0," +                ""comsharing":100,"multiplier":1}]";        Josson josson = Josson.fromJsonString(jsonString);        JsonNode node = josson.getNode(            "group(map(userid,groupname,segment,accountcode,symbol,exchange,expirydate," +            "          currency,usdrate,clientsharing,broksharing,comsharing,multiplier))" +            ".map(key.userid," +            "     key.groupname," +            "     key.segment," +            "     key.accountcode," +            "     key.symbol," +            "     key.exchange," +            "     key.expirydate," +            "     key.currency," +            "     key.usdrate," +            "     key.clientsharing," +            "     key.broksharing," +            "     key.comsharing," +            "     key.multiplier," +            "     elements.bfqty.sum()," +            "     elements.bfrate.sum()," +            "     elements.bfamt.sum()," +            "     elements.buyqty.sum()," +            "     elements.sellqty.sum()," +            "     elements.netqty.sum()," +            "     elements.cfqty.sum()," +            "     elements.cfamt.sum()," +            "     elements.ltp.sum()," +            "     elements.grossmtm.sum()," +            "     elements.brokerageamt.sum()," +            "     elements.netmtm.sum())");        System.out.println(node.toPrettyString());    }}

注意事项

确保 JSON 字符串的格式正确,否则 Josson 可能会抛出异常。根据实际需求调整分组键和聚合函数。Josson 提供了丰富的函数和操作符,可以实现更复杂的 JSON 数据转换和处理。 请参考 Josson 的官方文档了解更多信息。

总结

Josson 库提供了一种强大而简洁的方式来聚合 JSON 数组中的数据。通过 group() 和 map() 函数,可以轻松地根据特定条件对数据进行分组和聚合,从而简化了 JSON 数据处理的复杂性。 掌握 Josson 库的使用,可以大大提高处理 JSON 数据的效率。

以上就是使用 Josson 库聚合 JSON 数组中具有相同键值的对象的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/37623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 10:32:37
下一篇 2025年11月5日 10:52:57

相关推荐

  • 玛丽埃塔(Marietta)数字化:停车收费表的未来就在这里!

    宾夕法尼亚州玛丽埃塔(marietta)正在告别老旧的宿舍式停车系统,全面引入数字化支付方式。了解这一转变对居民和游客带来的影响。 玛丽埃塔迈向数字化:迎接智能停车新时代! 向翻找零钱的日子说再见吧!宾夕法尼亚州玛丽埃塔(Marietta)对其停车设施进行重大升级,将传统硬币驱动的设备替换为现代化的…

    2025年12月8日
    000
  • Defi贷款飙升:TVL命中率创纪录的$ 55.99b – 是什么推动了繁荣?

    defi借贷迎来强势复苏,总锁定价值(tvl)创下历史新高,达到559.9亿美元。这一增长由机构兴趣与创新金融工具共同推动。 DeFi借贷激增:TVL突破559.9亿美元大关——繁荣背后的驱动力 DeFi借贷正经历显著回升,截至6月20日,总锁定价值(TVL)已飙升至创纪录的559.9亿美元。这次增…

    2025年12月8日
    000
  • Litecoin:加密货币市场中的弹性竞争者

    litecoin与加密市场的稳定性和效率保持紧密关联。其潜在的etf前景和技术优势使其成为具备竞争力的加密货币。 Litecoin(LTC)常被称为“比特币黄金的白银”,在快速发展的加密市场中,它依然保持着强劲的竞争力。截至2025年6月20日,Litecoin展现出良好的状态,稳定性与高效性使其在…

    2025年12月8日
    000
  • 社交,产量和经济范式转变:Pop Max是否领导了指控?

    探索pop max等社交平台如何融合分散金融与社区,将用户行为转化为有形资产,并重塑经济范式。 社交、产量与经济范式的变革:Pop Max是否引领潮流? 在不断演进的Web3领域中,社交互动与去中心化金融的结合正在开辟令人振奋的新可能。诸如Pop Max之类的平台正站在这一浪潮的最前沿,致力于重新定…

    2025年12月8日
    000
  • Vaultz Capital的筹款:氦气风险重新品牌和眼睛破坏性部门

    vaultz capital(前身为helium ventures)完成400万英镑融资,采用风投模式聚焦区块链与数字资产等高增长领域。 Vaultz Capital(原名Helium Ventures)因其最新一轮400万英镑的融资以及向颠覆性行业的战略转移而引发关注。让我们一起探讨这一变化对另类…

    2025年12月8日
    000
  • 比特币的价格下降:在动荡的市场中导航关键支持水平

    比特币近期的价格起伏令投资者聚焦于关键支撑位。这会是大幅下挫的前兆,还是这些支撑位能稳如磐石? 比特币价格下滑:动荡市况下的核心支撑观察 比特币正经历剧烈波动,市场目光聚焦在几个关键的支撑点上。这次下跌是暂时回调,还是趋势反转?我们来一探究竟。 比特币的关键支撑区域 目前市场普遍关注的支撑区间位于9…

    2025年12月8日
    000
  • Stablecoin,创新和加密未来:纽约的观点

    探索stablecoins不断演化的版图,了解加密货币市场最新的进展,以及这一切对金融未来的影响。 Stablecoins正在重塑支付方式,加密市场也日趋成熟。这将如何影响未来?让我们以纽约风格一探究竟。 Stablecoins崛起:更迅速、更经济、更可靠 USDC等Stablecoins正掀起一股…

    2025年12月8日
    000
  • 区块链,P2P游戏和市场:链上经济体的新时代

    探索区块链技术与p2p游戏及市场的融合。了解optake和opensea等平台如何推动数字资产交易及链上经济的未来。 区块链、点对点(P2P)游戏以及在线市场的交汇正在催生一系列新机遇。稳定币支付方式和NFT交易平台的发展,正推动更加安全、高效且用户友好的数字经济生态建设。 超越:在区块链上重塑P2…

    2025年12月8日
    000
  • 币安交易所app零手续费_币安binance官网最新版本体验

    想必你也被“币安交易所App零手续费”这个标题吸引了吧?的确,对于交易者来说,手续费是影响收益的重要因素。那么,币安真的实现了完全零手续费吗?币安Binance官网最新版本又有哪些值得关注的体验升级呢?让我们一起深入了解。在数字货币交易的世界里,每一笔交易都伴随着手续费,这笔费用直接影响着交易者的利…

    2025年12月8日
    000
  • 加密公牛奔跑手表:2025年6月注视着Altcoins

    在2025年6月探索加密货币领域?了解有潜力的山寨币,如sky、pendle和mixie,以及xrp的价格波动和solaxy预售的成功背后的观点。 2025年6月正逐渐成为加密货币市场中一个引人注目的月份,特别是对Altcoins而言。随着潜在牛市信号的出现,现在是时候深入研究哪些山寨币吸引了关注,…

    2025年12月8日
    000
  • 空调警报:Infofi,预测性AI和Crypto入职的未来

    kucoin上线infofi代币,将预测性人工智能推向加密领域的核心位置,而无摩擦的空投机制正重新定义用户体验。 空投新风向:Infofi与预测AI引领未来趋势 当各类项目不断尝试吸引用户并构建活跃社区时加密行业正掀起新一轮热潮。当前最引人注目的趋势之一是将空投机制与预测性人工智能相结合。Kucoi…

    2025年12月8日
    000
  • 福特和卡尔达诺:用区块链彻底改变法律数据存储

    福特深入研究cardano区块链的安全机制,结合ai驱动的法律数据管理方案,或将为受监管行业树立新标杆。 福特与Cardano:区块链重塑法律数据存储方式 在数据安全与合规性愈发重要的当下,福特联合Iagon和云法院,探索利用Cardano区块链进行法律数据管理,迈出了关键一步。该项目旨在解决传统法…

    2025年12月8日
    000
  • 火币在线入口 火币app下载教程最新版

    火币App下载教程最新版如下:步骤一,访问火币官网,确认网址正确性并选择所在地区的官方网站;步骤二,找到App下载入口,根据手机操作系统选择Android版或iOS版;步骤三,选择下载方式,包括扫描二维码、直接下载安装包或跳转到应用商店下载;步骤四,安装App,若为安装包下载需允许安装未知来源应用,…

    2025年12月8日
    000
  • 如何正确获取币安App 币安交易平台的官网安装方式是什么

    币安App是进行数字货币交易的重要工具,它提供了便捷的交易体验和丰富的功能。为了确保您下载到的是官方正版App,并避免下载到恶意软件,我们为您准备了这份详细的安装教程。通过本文提供的官方App下载链接,您可以安全、快速地将币安App安装到您的设备上,开启您的数字货币交易之旅。请务必按照以下步骤操作,…

    2025年12月8日
    000
  • 币安交易所app官方安装_币安binance官网安卓版安装包

    在数字货币的世界里,选择一个安全可靠的平台至关重要。币安,作为全球领先的加密货币交易所,凭借其强大的技术实力、丰富的交易品种和卓越的用户体验,赢得了全球数百万用户的信赖。现在,您可以直接下载币安官方APP正版v2.105.3,随时随地安全便捷地管理您的数字资产。 币安APP不仅仅是一个交易平台,更是…

    2025年12月8日
    000
  • 易欧OKX官方APP v6.125.0 官网iOS正版安装包

    作为全球领先的数字资产交易平台,okx致力于为用户提供安全、稳定、便捷的交易体验。通过官方app,您可以随时查看行情、进行交易、管理您的账户,以及参与okx平台的各种活动。告别繁琐的网页操作,享受更流畅、更便捷的数字资产管理体验。 下载OKX官方APP v6.125.0 iOS正版安装包 请注意: …

    2025年12月8日
    000
  • 必安Binance交易所v2.104.7官方中文版快速注册通道

    币安不仅仅是一个交易平台,更是一个集成了多种功能的综合性数字资产生态系统。它提供包括现货交易、期货交易、杠杆交易、期权交易、Launchpad(新币发行平台)、Staking(质押挖矿)等在内的多种产品和服务,满足不同用户的投资需求。无论您是经验丰富的交易员,还是刚入门的新手,都能在币安找到适合自己…

    2025年12月8日
    000
  • 币安Binance官方APP最新版 币安BinanceAPP官方最新版入口

    数字货币的世界日新月异,选择一个安全、可靠、便捷的交易平台至关重要。币安(Binance)作为全球领先的数字资产交易平台,凭借其卓越的安全性、丰富的币种选择、流畅的用户体验,赢得了全球数百万用户的信赖。为了确保您能够访问到官方最新版本的币安APP,并享受到最完善的功能和服务,我们为您提供以下官方入口…

    2025年12月8日
    000
  • 币安交易所app最新版 币安官网交易软件 v2.101.9

    币安交易所app是进行数字货币交易的重要工具,它提供了便捷、安全、高效的交易体验。为了帮助您轻松下载并安装最新版本的币安app(v2.101.9),我们特意准备了这份详细的教程。通过本文提供的官方app下载链接,您可以直接获取最新版本的安装包,避免下载到非官方或恶意版本,保障您的交易安全。 下载币安…

    2025年12月8日
    000
  • 易欧交易所安卓版下载 易欧app下载教程

    易欧交易所安卓版可通过官网或第三方应用商店安全下载。1.通过官网下载:打开浏览器输入官方网址,找到“下载APP”入口,选择安卓版并点击“直接下载”或扫描二维码下载,安装时需开启未知来源应用权限;2.通过第三方应用商店下载:在华为、小米等应用商店搜索“易欧”或“OKX”,确认开发者信息后下载安装。注意…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信