使用 Josson 库聚合 JSON 数组中满足特定条件的键值

使用 josson 库聚合 json 数组中满足特定条件的键值

本文介绍了如何使用 Josson 库,根据特定条件(如 userid、groupname、segment 等字段相同)对 JSON 数组中的数据进行聚合,并对数值类型的键进行求和操作,最终生成新的 JSON 数组。通过详细的代码示例和步骤说明,帮助读者理解 Josson 库的使用方法,并能灵活应用于实际的数据处理场景。

在处理 JSON 数据时,经常会遇到需要根据某些字段的值进行分组,然后对其他字段进行聚合计算的需求。 例如,在金融数据分析中,可能需要根据用户ID、交易品种等信息,统计用户的总交易量、总交易额等。 手动编写代码实现这些功能比较繁琐,容易出错。 Josson 库提供了一种简洁高效的方式来完成这类任务。

Josson 简介

Josson 是一个强大的 JSON 处理库,它提供了一种简洁的语法,可以通过链式调用完成复杂的 JSON 数据转换和查询操作。 它特别擅长于处理嵌套的 JSON 数据结构,并支持各种聚合函数,例如 sum(), count(), avg() 等。

使用 Josson 进行 JSON 数据聚合

下面将通过一个具体的例子,演示如何使用 Josson 库对 JSON 数组进行聚合操作。

1. 引入 Josson 库

首先,需要在项目中引入 Josson 库。 如果使用 Maven,可以在 pom.xml 文件中添加以下依赖:

    com.octomix    josson    最新版本

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

2. JSON 数据准备

假设有如下 JSON 数组,需要根据 userid、groupname、segment、accountcode、symbol、exchange 和 expirydate 字段进行分组,并对 bfqty、bfrate、bfamt、buyqty、sellqty、netqty、cfqty、cfamt、ltp、grossmtm、brokerageamt 和 netmtm 字段进行求和:

[  {    "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  }]

3. 使用 Josson 进行转换

import com.octomix.josson.Josson;import com.octomix.josson.JsonNode;import javax.json.JsonString;public class JossonAggregation {    public static void main(String[] args) {        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());    }}

代码解释:

Josson.fromJsonString(jsonString): 将 JSON 字符串解析为 Josson 对象。group(map(userid,groupname,segment,accountcode,symbol,exchange,expirydate,currency,usdrate,clientsharing,broksharing,comsharing,multiplier)): 这部分代码定义了分组的依据。 group() 函数根据 map() 函数中指定的字段进行分组。 map() 函数用于提取每个 JSON 对象中指定的字段,并将它们组合成一个键。.map(key.userid, key.groupname, …): 这部分代码定义了输出结果的结构。 key.userid 表示使用分组键中的 userid 字段作为输出结果中的 userid 字段的值。 elements.bfqty.sum() 表示对每个分组中的 bfqty 字段进行求和,并将结果作为输出结果中的 bfqty 字段的值。

4. 输出结果

运行上述代码,将得到以下输出结果:

[ {  "userid" : "CNAF01",  "groupname" : "Abhay",  "segment" : "CosCLFIN",  "accountcode" : "66CN-063CC",  "symbol" : "INX22",  "exchange" : "SGXFO",  "expirydate" : "24NOV2022",  "currency" : "USD",  "usdrate" : 81.33,  "clientsharing" : 50,  "broksharing" : 0,  "comsharing" : 50,  "multiplier" : 2,  "bfqty" : -107.0,  "bfrate" : 18462.05,  "bfamt" : 3950878.6999999997,  "buyqty" : 21.0,  "sellqty" : 59.0,  "netqty" : -38.0,  "cfqty" : -145.0,  "cfamt" : 5358027.699999999,  "ltp" : 18433.5,  "grossmtm" : 0.0,  "brokerageamt" : 48.0,  "netmtm" : 0.0}, {  "userid" : "CNAF01",  "groupname" : "Abhay",  "segment" : "CosCLFIN",  "accountcode" : "CW05",  "symbol" : "NIFTY",  "exchange" : "NSEFO",  "expirydate" : "24NOV2022",  "currency" : "INR",  "usdrate" : 1,  "clientsharing" : 0,  "broksharing" : 0,  "comsharing" : 100,  "multiplier" : 1,  "bfqty" : 0.0,  "bfrate" : 688.0,  "bfamt" : -2667330.0,  "buyqty" : 1950.0,  "sellqty" : 1950.0,  "netqty" : 0.0,  "cfqty" : 0.0,  "cfamt" : -3598357.5,  "ltp" : 670.6,  "grossmtm" : 0.0,  "brokerageamt" : 1070.66216625,  "netmtm" : 0.0} ]

可以看到,Josson 库成功地根据指定的字段对 JSON 数组进行了分组,并对数值类型的字段进行了求和操作。

注意事项

Josson 库的语法比较灵活,可以根据实际需求进行调整。在进行聚合操作时,需要确保参与计算的字段都是数值类型。如果 JSON 数据中包含 null 值,可能会导致聚合结果不正确,需要进行特殊处理。ltp 字段被当做字符串处理,如果需要正确计算,需要先转换为数值类型,可以使用 elements.ltp.number().sum()。

总结

本文介绍了如何使用 Josson 库对 JSON 数组进行分组和聚合操作。 Josson 库提供了一种简洁高效的方式来处理 JSON 数据,可以大大简化代码的编写,提高开发效率。 通过学习本文,读者可以掌握 Josson 库的基本用法,并能灵活应用于实际的数据处理场景。

以上就是使用 Josson 库聚合 JSON 数组中满足特定条件的键值的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 14:35:07
下一篇 2025年11月5日 14:39:05

相关推荐

  • 比特币披萨值10 亿?一文介绍史上最贵的披萨!

    比特币披萨是什么? 比特币披萨(Bitcoin Pizza)是指加密货币史上公认的首次实体交易。 一切源自于2010 年5 月18 日的一篇贴文,比特币核心开发者Laszlo Hanyecz 在Bitcointalk 发文希望用10,000 颗BTC 换取两块Papa John’s 的披…

    2025年12月8日 好文分享
    000
  • SPK币未来如何?Spark Protocol(SPK)价格预测2025-2030

    目录 Spark项目概览Spark项目背景Spark项目类别1. 稳定币收益优化2. DeFi自动化基础设施3. 跨链流动性路由4. 代币经济驱动的AMM参与Spark市场分析SPK币价格分析当前指标SPK币价格预测(2025-2030)理由:总结 spark protocol (spk)正在崭露头…

    2025年12月8日 好文分享
    000
  • 比特币缩放摊牌:闪电网络,sztorc和付款的未来

    闪电网络是“巨大失败”吗?paul sztorc和alex gladstein对比特币扩展方案展开激烈争论。加入讨论! 比特币扩展对决:闪电网络、Sztorc与支付的未来 比特币扩展之争愈演愈烈!闪电网络是否兑现了它的承诺,还是如Paul Sztorc所言,是一个“巨大的失败”?本文深入探讨这场争议…

    2025年12月8日
    000
  • Aptos(APT)加密反弹:这是现在购买的最高加密货币吗?

    aptos(apt)展现出增长潜力的韧性。深入解析其技术实力、市场地位,以及在复杂信号中是否值得入手。 Aptos(APT)加密反弹:当前是否是买入的最佳时机? 在加密市场面临多空交织的背景下,Aptos(APT)正显现出复苏迹象。经历一波上涨后,APT交易价约为4.096美元,它能否守住阵地,并跻…

    2025年12月8日
    000
  • 错过了BNB? Ruvi AI的预售带有AI奖金可能是您的第二次机会

    ruvi ai(ruvi)正在提供一次诱人的预售机会,并附带潜在的ai奖金,吸引了那些未能参与binance coin(bnb)早期阶段投资者的关注。这是否是下一个重大机遇?让我们一探究竟。 错过BNB?Ruvi AI的预售和AI奖励或许是你的新机会 Binance Coin(BNB)曾带来惊人的回…

    2025年12月8日
    000
  • Ruvi AI:真的准备好Eclipse Tron和其他加密巨头吗?

    ruvi ai将区块链与人工智能结合,据预测可带来103倍的投资回报率。但这样一个新兴项目,真的能撼动tron这样的老牌巨头吗? 加密圈的朋友们注意了!尽管Tron一直在区块链领域占据一席之地,但一个新势力正悄然崛起——Ruvi AI。它带着惊人的承诺和前沿技术强势登场,是否会动摇Tron的地位?我…

    2025年12月8日
    000
  • WIF价格检查:每周需求,反弹或崩溃?

    dogwifhat(wif)价格走势扑朔迷离!我们深入分析了wif当前的价格动向、关键需求区域以及可能的反弹或下跌趋势。 加密圈的朋友们,是时候聊聊Wif了。这枚基于索拉纳链的模因币Dogwifhat(WIF)近期波动剧烈,大家都在关心:接下来它会走向何方?我们一起来看看WIF价格走势、周线级别的买…

    2025年12月8日
    000
  • Ondo Price:它可以收回$ 1并达到3美元吗?预测潜水

    ondo价格承受下行压力,但积极信号逐渐显现。它能否重返1美元并飙升至3美元?本文基于最新市场动态探讨了ondo的未来潜力。 近期,RWA代币Ondo经历了剧烈波动,但是否已为强势反弹做好准备?我们将深入分析技术图表,并探讨分析师对于Ondo重回1美元甚至冲击更高目标的看法。 Ondo价格:迈向1美…

    2025年12月8日
    000
  • Neo Pepe硬币:模因令牌接管加密货币预售

    neo pepe coin($neop)正在成为一种独特的模因币,凭借其结构化的预售机制、强大的治理模式以及以社区为中心的理念迅速崭露头角。 在不断变化的加密货币市场中,一个全新的模因币正掀起热潮:Neo Pepe Coin($neop)。当Pepe币面临下行压力时,Neo Pepe以其创新策略和坚…

    2025年12月8日
    000
  • Magacoin Finance:2025年投资者的宠儿?

    magacoin finance在2025年以其预售吸引了大量投资者的目光。这款结合模因元素与创新功能的代币,是否真的具备引爆市场的潜力? Magacoin Finance:2025年加密投资新焦点? 在快速演变的加密货币领域中,Magacoin Finance自2025年起便凭借其预售活动引起了广…

    2025年12月8日
    000
  • Cathie Wood,Ark Invest和Circle Shares:在Stablecoin Wave上狂野的旅程

    cathie wood的ark invest在其持有的circle(crcl)股份上进行了调整,这一举动正值稳定币市场乐观情绪高涨之际,受到监管进展与市场热情的双重推动。 Cathie Wood、Ark Invest与Circle Shares:在稳定币浪潮中的激荡旅程 ARK Invest在Cir…

    2025年12月8日
    000
  • Neo Pepe Presale:下一个大模因硬币?

    潜入neo pepe预售热潮!这是下一个pepe还是shib?揭示投资者为何纷纷加入neo pepe浪潮。 Neo Pepe预售:下一个热门模因币? 青蛙币正在崛起,Neo Pepe引发热议!随着预售阶段的火热进行,Neo Pepe是否有望成为下一个现象级模因币?我们一起来看看是什么让这款以青蛙为主…

    2025年12月8日
    000
  • Cardano,Polkadot和未固定的ROI:解码最新的加密策略

    探索cardano与polkadot的比特币布局,以及unstaked所带来的高回报潜力,为精明的加密投资者提供新视角。 Cardano、Polkadot与Unstaked正在加密领域掀起波澜。让我们深入剖析它们的战略及其潜在投资回报。 Cardano的比特币部署:推动DeFi发展? Cardano…

    2025年12月8日
    000
  • Ruvi AI:区块链技术遇到了现实世界实用程序 – 下一件大事?

    ruvi ai能否引领下一轮牛市?探索其区块链与人工智能的融合如何对接实际应用,从而确立其顶级加密竞争者的地位。 加密世界不断创新,而Ruvi AI正站在风口浪尖。通过将区块链技术与现实应用场景结合,它不仅仅是一个普通的代币,更可能成为颠覆行业的关键角色。 Ruvi AI:连接区块链与AI,创造真实…

    2025年12月8日
    000
  • 云挖掘,比特币和XRP:2025透视图

    通过flare的firelight等创新平台探索2025年云挖矿、比特币角色演变以及xrp在去中心化金融中的整合。 云挖矿、比特币与XRP:2025展望 进入2025年,加密货币领域仍在快速演进。我们来看看当前围绕云挖矿的最新进展、比特币持续发展的定位,以及XRP在DeFi(去中心化金融)方面的突破…

    2025年12月8日
    000
  • Binance,创始人和ATH:浏览加密货币景观

    cz谈市场调整与ath前景,结合ruvi ai等bnb潜在竞争者的崛起,勾勒出加密市场的复杂格局。 Binance、创始人与ATH:穿越加密世界的视角 加密货币领域从不缺乏动态变化。从市场回调到新型实用代币的涌现,这一行业持续演变。我们来探讨一下Binance的最新动向、创始人的观点,以及对下一个历…

    2025年12月8日
    000
  • Ruvi AI vs. Solana:2025年的投资回报

    ruvi ai:以ai与区块链的融合掀起热潮,挑战solana霸主地位,或带来高达13,200%的roi。它会是加密投资的新未来吗? 在持续演化的加密领域中,投资者始终在寻找下一个风口。尽管Solana凭借其高效的区块链技术广受欢迎,但Ruvi AI(简称Ruvi)正以AI与区块链结合的独特模式崭露…

    2025年12月8日
    000
  • 矿工发货狂热:块状铅牵引,而乔格倾角和vechain氛围

    blockdag的矿工运输即将启动,与dogecoin的价格挣扎和vechain的生态扩展形成鲜明对比。blockdag会成为下一个大事件吗? 加密世界从不停歇,精彩剧情也从未中断。眼下,所有人关注的焦点都集中在矿工交付进展上,而Dogecoin正面临市场压力,同时Vechain则悄然推动其技术升级…

    2025年12月8日
    000
  • Hive Digital的多伦多AI数据中心:主权强国

    hive digital在多伦多插上旗帜,将其数据中心升级为ai计算的核心力量。这一大胆举措对加拿大在人工智能领域的雄心意味着什么? 嘿,注意啦!Hive Digital在多伦多设立的新AI数据中心正引发广泛关注。这不仅仅是一次普通的扩张;而是一场抢占加拿大AI高地的战略布局。我们来一探究竟。 多伦…

    2025年12月8日
    000
  • Moonx的全球KOL招聘:塑造链贸易生态系统

    moonx推出全球kol招募计划,诚邀行业意见领袖共同打造bydfi生态中的链上交易新纪元。 Moonx全球KOL招募:引领链上交易生态变革 加密领域持续进化,由BYDFI推出的Moonx正凭借其独特的链上交易工具掀起波澜。如今,该平台正式启动全球KOL招募计划,旨在邀请具有影响力的创作者与社区领袖…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信