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));
}
}