jsonArray中按字段排序

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":"李四"}]

原文地址:https://www.cnblogs.com/wakey/p/12306429.html

时间: 2024-10-27 08:11:28

jsonArray中按字段排序的相关文章

mongodb 通过嵌入文档中的字段排序

mongodb中的全部数据: db.testInfo.find({}) .sort({_id:-1}) .limit(100) 查询结果: /* 1 createdAt:2019/10/11 下午5:12:50*/ { "_id" : ObjectId("5da04792665cd81dc0d46d3d"), "name" : "jim2", "age" : 5, "list" : [

linux:srot进行对文件中的字段排序

sort对文件中的指定行进行排序,并将结果写到标准的输出.如果File参数指定了多个文件,那么sort命令将这些文件连接起来,当作一个文件进行排序. sort语法: sort[-fbMnrtuk] [file] 选项参数: -f忽略大小写差异. -b忽略最前面的空格. -r反向排序 -M以月份的名字来排序 -n使用纯数字进行排序 -u相同的数字仅出现一次 -t分隔符,默认是tab -k以哪个field来进行排序 sort默认是以第一个数据进行排序的,默认以字符串的形式排序,数字拍在字母前. so

CLR如何控制类型中的字段排序

[StructLayout(LayoutKind.Sequential) ]保持字段布局 [StructLayout(LayoutKind.Auto) ]CLR自动选择最优 [StructLayout(LayoutKind.Explicit) ]利用偏移量在内存中显示排列字段,需要用FieldOffset()设置每个成员的位置,这样就可以实现类似c的联合体union的功能 如果不电显式指定,CLR默认为引用类型使用auto,为值类型使用Sequential,这是CLR认为值类型会更多的与非托管代

js 对象数组 根据对象中某个字段排序

第一种排序方式 var compare = function (prop) { return function (obj1, obj2) { var val1 = obj1[prop]; var val2 = obj2[prop]; if (val1 < val2) { return 1; } else if (val1 > val2) { return -1; } else { return 0; } } }; $scope.orderDrugMasterList.sort(compare(

List多字段排序,orderBy,ThenBy

List排序问题,orderBy,ThenBy 1.List中一个字段排序 前几天做的项目中,获取的List<T>需要用某个字段来进行排序,困扰了很久.用OrderBy解决了.具体是这样的. List.OrderBy(i=>i.id):表示根据id来排序,默认是升序. List.OrderByDescending(i=>i.name):根据name排序,降序排列. 2.List中两个字段排序: 写法如下,直接用例子: List.OrderBy(i=>i.id).ThenBy(

Java中对JSONArray中的对象的某个字段进行排序

需求: 今天调用一个第三方接口,然后返回的是一个josn数组,需要根据里面的"报告日期"报告日期进行由大到小排序,最新的排在前面. 这种别人接口已经开发完成,不能改,所以只有我们自己来排序. 思路一():将josn数组转为list集合,然后获取到里面的每个对象,再获取"报告日期",然后排序,然后对对应的对象排序. 思路二: 实现java的Collections.sort方法,自定义Comparator方法,然后排序. 这样效率比较高. 下面是测试和实现代码. imp

【HOW】如何对Reporting Services表格中数据按字段排序

Reporting Services中可以设置排序的地方非常多,有很多地方从其字面意思上好像是对表格数据的排序,但实际都不管用.在多次尝试后,得到如下的有效设置方式: 1. 鼠标右键单击要排序字段的内容单元格(不是标题单元格). 2. 在弹出菜单中选择:行组 > 组属性. 3. 在弹出窗口中选择"排序"选项卡,并在右侧界面中添加排序依据. 有时,在完成如上设置后仍未看到正确排序,这可能是因为对应数据集的排序规则(类似字符集)不正确,设置方法如下: 1. 在表格对应的数据集名称上右

PHP中根据二维数组中某个字段实现排序

想要实现二维数组中根据某个字段排序,一般可以通过数组循环对比的方式实现.这里介绍一种更简单的方法,直接通过PHP函数实现.array_multisort() :可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序.详细介绍可参考PHP手册:https://www.php.net/manual/zh/function.array-multisort.php 实例: 1.单个字段排序: $data = [ ['id' => 1, 'name' => '张三', 'sort' =&

iOS开发——NSArray中的字典排序

手头上碰到一个项目,需要给数组中的字典中的一个字段排序,想了想,干脆再字典中增加一个字段,用来记录需要排序字段的第一个字符,用它来作为比较的对象,进行排序. - (void)viewDidLoad { [super viewDidLoad]; NSArray *arr = @[@{@"sortKey":@"54"},@{@"sortKey":@"67"},@{@"sortKey":@"78&quo