JSONObject 列表排序

package com.ycyj.check;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.*;

@Slf4j
public class checkLoopDict {

    public static void main(String[] args){
        String jsonstr = "{'data': [{'tk_code': 'B$999999', 'tk_name': '特斯拉', 'subs': [{'ZiMu': 'a', 'tk_code': 'B$100001', 'tk_name': '电池'}, {'ZiMu': 'b', 'tk_code': 'B$100002', 'tk_name': '电控'}, {'ZiMu': 'c', 'tk_code': 'B$100003', 'tk_name': '电机'}]}]}";
        JSONObject jsonObject = JSONObject.parseObject(jsonstr);

        // 使用json相关对象方法, 无法实现排序
//        JSONArray DataList = jsonObject.getJSONArray("data");
//        System.out.println("声明的json数组信息:" + DataList);
//        for(int i=0; i < DataList.size(); i++){
//            var x = DataList.getJSONObject(i);
//            var subs = x.getJSONArray("subs");
//            x.put("ZF", 20.0);
//            System.out.println(String.valueOf(x));
//            for(int j=0; j < subs.size(); j++){
//                var y = subs.getJSONObject(j);
//                var z = y.get("ZiMu");
//                y.put("ZF", 10.0);
//                System.out.println(String.valueOf(y));
//            }
//        }

        // 使用ArrayList来排序,JSONArray不支持排序
        List<JSONObject> l = new ArrayList(); 
        JSONArray DataList = jsonObject.getJSONArray("data");
        System.out.println("声明的json数组信息:" + DataList);
        for(int i=0; i < DataList.size(); i++){
            var x = DataList.getJSONObject(i);
            var subs = x.getJSONArray("subs");
            x.put("ZF", 20.0*i);
            System.out.println(String.valueOf(x));
            List<JSONObject> l1 = new ArrayList();
            for(int j=0; j < subs.size(); j++){
                var y = subs.getJSONObject(j);
                var z = y.get("ZiMu");
                y.put("ZF", 10.0*j);
                System.out.println(String.valueOf(y));
                l1.add(y);
            }
            // 排序内层, 降序
            Collections.sort(l1, new Comparator<JSONObject>(){
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    var c1 = o1.getDoubleValue("ZF");
                    var c2 = o2.getDoubleValue("ZF");
                    if (c2-c1>0){
                        return 1;
                    }
                    else return -1;

                }
            });

            x.put("subs", l1);
            l.add(x);
        }

        // 排序外层, 降序
        Collections.sort(l, new Comparator<JSONObject>(){
            @Override
            public int compare(JSONObject o1, JSONObject o2) {
                var c1 = o1.getDoubleValue("ZF");
                var c2 = o2.getDoubleValue("ZF");
                if (c2-c1>0){
                    return 1;
                }
                else
                    return -1;

            }
        });
        
        System.out.println(String.valueOf(l));
    }
}

  

 

posted @ 2022-01-17 16:15  Adamanter  阅读(730)  评论(0)    收藏  举报