ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JSONArray中按字段排序

2021-12-17 10:32:28  阅读:249  来源: 互联网

标签:String JSONArray JSONObject Score import 排序 ID


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        String jsonArrStr = "[{"ID":"A01","Name":"张三","Score":88},{"ID":"A02","Name":"李四","Score":99},{"ID":"A01","Name":"王五","Score":77}]";
        System.out.println("排序前:" + jsonArrStr);
        String jsonArraySort = jsonArraySort(jsonArrStr);
        System.out.println("排序后:" + jsonArraySort);
    }


    public static String jsonArraySort(String jsonArrStr) {
        // json字符串转为JSONArray
        JSONArray jsonArr = JSON.parseArray(jsonArrStr);
        //存放排序结果json数组
        JSONArray sortedJsonArray = new JSONArray();
        // 用于排序的list
        List<JSONObject> list = new ArrayList<JSONObject>();
        //遍历待排序的json数组,并将数据放入list
        for (int i = 0; i < jsonArr.size(); i++) {
            list.add(jsonArr.getJSONObject(i));
        }

        Collections.sort(list, new Comparator<JSONObject>() {
            //排序字段
            private static final String KEY_NAME1 = "ID";
            private static final String KEY_NAME2 = "Score";

            @Override
            public int compare(JSONObject a, JSONObject b) {
                String valA1 = new String();
                String valA2 = new String();
                String valB1 = new String();
                String valB2 = new String();
                try {
                    valA1 = a.getString(KEY_NAME1);
                    valA2 = b.getString(KEY_NAME1);
                    valB1 = a.getString(KEY_NAME2);
                    valB2 = b.getString(KEY_NAME2);
                } catch (JSONException e) {
                    System.out.println(e);
                }
                // 设置排序规则
                int i = valA1.compareTo(valA2);
                if (i == 0) {
                    int j = valB1.compareTo(valB2);
                    return j;
                }
                return i;
            }
        });
        //将排序后结果放入结果jsonArray
        for (int i = 0; i < jsonArr.size(); i++) {
            sortedJsonArray.add(list.get(i));
        }
        return sortedJsonArray.toString();
    }
}

结果:

排序前:[{"ID":"A01","Name":"张三","Score":88},{"ID":"A02","Name":"李四","Score":99},{"ID":"A01","Name":"王五","Score":77}]
排序后:[{"Score":77,"ID":"A01","Name":"王五"},{"Score":88,"ID":"A01","Name":"张三"},{"Score":99,"ID":"A02","Name":"李四"}]

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Comparator;

public class Test2 {
    public static void main(String[] args) {
        String str = "[{"score":77,"id":"A04"},{"score":88,"id":"A01"},{"score":66,"id":"A01"}]";
        System.out.println("排序前: " + str);
        JSONArray array = JSON.parseArray(str);

        for (Object arr : array) {
            System.out.println(arr);
        }

        // 方式一
//        array.sort(Comparator.comparing(obj -> ((JSONObject)obj).getInteger("score")));
//        array.sort(Comparator.comparing(e-> ((JSONObject)e).getString("id")));
        // 方式二:单字段排序
//        array.sort((a, b) -> ((JSONObject) a).getString("id").compareTo(((JSONObject) b).getString("id")));
        // 方式二:多字段排序
        array.sort((a, b) -> {
            int i = ((JSONObject) a).getString("id").compareTo(((JSONObject) b).getString("id"));
            if (i == 0) {
                int j = ((JSONObject) a).getInteger("score").compareTo(((JSONObject) b).getInteger("score"));
                return j;
            }
            return i;
        });
        System.out.println("排序后: " + array);

        for (Object arr : array) {
            System.out.println(arr);
        }
    }
}

结果:

 

 

 资料来自: http://t.zoukankan.com/wakey-p-12306429.html

 

标签:String,JSONArray,JSONObject,Score,import,排序,ID
来源: https://www.cnblogs.com/hanzeng1993/p/15701219.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有