
本文介绍了如何使用 Josson 库,在 Java 环境中,根据特定条件对 JSON 数组中的数据进行聚合。通过 Josson 提供的强大转换功能,可以高效地对 JSON 数据进行分组、映射和求和等操作,最终生成满足特定格式要求的 JSON 输出。
在处理 JSON 数据时,经常需要根据某些条件对数据进行聚合,例如,将具有相同用户ID、组名和片段的数据进行合并,并对特定字段进行求和。Josson 是一个强大的 JSON 处理库,可以方便地实现这种需求。
首先,需要在项目中引入 Josson 库。可以通过 Maven 或 Gradle 添加依赖:
Maven:
<dependency>
<groupId>com.octomix</groupId>
<artifactId>josson</artifactId>
<version>最新版本</version> <!-- 请替换为最新版本 -->
</dependency>Gradle:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
implementation 'com.octomix:josson:最新版本' // 请替换为最新版本
以下是一个使用 Josson 聚合 JSON 数据的示例:
import com.octomix.josson.Josson;
import com.octomix.josson.JsonNode;
import javax.json.JsonString;
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());
}
}代码解释:
上述代码的输出结果如下:
[ {
"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 数据进行分组、映射和求和等操作,从而满足各种数据处理需求。 在处理复杂的 JSON 数据转换时,Josson 是一个非常有用的工具。
以上就是使用 Josson 库聚合 JSON 数组中满足条件的键值的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号