排序实现所用依赖
主要使用的是阿里的fastjson。 commons-lang3 为工具类,里面包含String, 集合,日期等各种工具类
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.74</version>
</dependency>
排序实现逻辑
排序主要从两块入手,分别是JSONObject, JSONArray.
对JSONObject进行排序
对JSONObject排序,选择使用TreeMap, 因为TreeMap的底层继承实现了NavigableMap接口,保证了TreeMap的有序性,
排序规则采用的是Comparator.naturalOrder(),具体逻辑实现:
public static void sortJSONbyTreeMap(JSONObject payload){
TreeMap<String, Object> treeMap = new TreeMap<>(Comparator.naturalOrder());
for (Map.Entry<String, Object> entry : payload.entrySet()) {
treeMap.put(entry.getKey(), entry.getValue());
}
for (Map.Entry<String, Object> entry : treeMap.entrySet()) {
payload.remove(entry.getKey());
payload.put(entry.getKey(), entry.getValue());
}
}
对JSONArray进行排序
排序算法选择的是冒泡排序,比较实现主要从三种类型考虑,分别为Comparable, JSONObject以及JSONArray.
当类型不同的数据比较时
采用Comparable > JSONObject > JSONArray的顺序进行排序,具体实现:
private final static ArrayList OBJ_TYPE_LIST = new ArrayList();
static {
OBJ_TYPE_LIST.add(Comparable.class.getSimpleName());
OBJ_TYPE_LIST.add(