两个json数组key相同的数据合并,并排序

本文介绍了一种使用Java处理JSON数据的方法,通过遍历两个不同的JSONArray,比较并合并具有相同月份的数据项,然后将未匹配的数据添加到最终的JSONArray中,并对其进行排序。此过程涉及到了JSON对象的创建、读取、更新及排序算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSONObject jo1 = new JSONObject();

jo1.put("month", "2016-03");

jo1.put("sum", "200");

JSONObject jo2 = new JSONObject();

jo2.put("month", "2015-11");

jo2.put("sum", "400");

JSONObject jo3 = new JSONObject();

jo3.put("month", "2015-07");

jo3.put("sum", "300");

        JSONArray ja1 = new JSONArray();

        ja1.add(jo1);

        ja1.add(jo2);

        ja1.add(jo3);

        

        JSONObject jo4 = new JSONObject();

jo4.put("month", "2016-03");

jo4.put("sum", "100");

JSONObject jo5 = new JSONObject();

jo5.put("month", "2016-02");

jo5.put("sum", "200");

JSONObject jo6 = new JSONObject();

jo6.put("month", "2015-09");

jo6.put("sum", "700");

JSONObject jo7 = new JSONObject();

jo7.put("month", "2015-07");

jo7.put("sum", "200");

        JSONArray ja2 = new JSONArray();

        ja2.add(jo4);

        ja2.add(jo5);

        ja2.add(jo6);

        ja2.add(jo7);

        

        JSONArray ja3 = new JSONArray();

        JSONObject jo = new JSONObject();

        for(int i=0;i<ja1.size();i++){

        for(int j=0;j<ja2.size();j++){

        if(ja1.getJSONObject(i).getString("month").equals(ja2.getJSONObject(j).getString("month"))){

        jo.put("month", ja1.getJSONObject(i).getString("month"));

        int sum1=Integer.parseInt(ja1.getJSONObject(i).getString("sum"));

        int sum2=Integer.parseInt(ja2.getJSONObject(j).getString("sum"));

        int sum = sum1+sum2;

        jo.put("sum", sum);

        ja3.add(jo);

        ja1.remove(i);

        ja2.remove(j);

        }

        }

        }

        

        for(int k=0;k<ja1.size();k++){

        ja3.add(ja1.get(k));

        }

        for(int m=0;m<ja2.size();m++){

        ja3.add(ja2.get(m));

        }

        Collections.sort(ja3);

        System.out.println(ja3);

        

        JSONObject temp = null;

        boolean exchange = false;

        for (int i = 0; i < ja3.size(); i++) {

            exchange = false;

            for (int j = ja3.size() - 2; j >= i; j--) {

                if (ja3.getJSONObject(j+1).getString("month").compareTo(

                        ja3.getJSONObject(j).getString("month")) >= 0) {

                    temp = ja3.getJSONObject(j+1);

                    ja3.set(j + 1, ja3.get(j));

                    ja3.set(j, temp);

                    exchange = true;

                }

            }

            if (!exchange)

                break;

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值